簡體   English   中英

如何在Django中設置刪除模型對象的時間限制?

[英]How to set a time limit for model object delete in django?

我想為Django中的對象刪除設置時間限制。

例如,用戶可以在3天內刪除他們提交的對象; 一旦過去了3天,他們將無法再刪除該對象。 此后,只有超級用戶才能刪除它。

我該如何實現? 我嘗試了很多方法,但是沒有一種方法可以解決……有人可以提供解決方案嗎?

  1. 將“對象創建”日期存儲在要處理的實例中。 使用DateTimeFieldauto_now_add將字段設置為現在第一次創建對象時的時間。
  2. 在刪除之前比較一下自創建以來已經過去了多少天,請在執行delete()timedelta來計算實例的使用期限之前,使用django預刪除信號觸發檢查。
  3. raise相應的錯誤並在必要時catch

專家提示:如果您編寫模型方法obj.can_delete(self, user) ,則可以在此處編寫2和3的邏輯,而不是在應用程序的不同部分使用它,那么您可以先詢問can_delete(user)以便進行演示警告或停用按鈕, user實例適用於條件語句,以僅允許超級用戶刪除忽略年齡競爭的內容。

一種解決方案是重寫模型的delete()方法並在其中添加檢查,也許是這樣的:

from datetime import timedelta
from django.utils import timezone as tz

def delete(self, *args, **kwargs):
    user = kwargs['user']     # this may raise KeyError
    start_date = ...          # this probably would be a model field

    if user.is_superuser or (tz.now() < start_date + timedelta(days=3)):
        super().delete(*args, **kwargs)
    else:
        raise some error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM