繁体   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