如何在Django中设置删除模型对象的时间限制?

时间:2018-12-20 12:54:54

标签: python django

我想为Django中的对象删除设置时间限制。

例如,用户可以在3天内删除他们提交的对象;一旦过去了3天,他们将无法再删除该对象。之后,只有超级用户才能删除它。

我该如何实现?我尝试了很多方法,但是没有办法...有人可以提供解决方案吗?

2 个答案:

答案 0 :(得分:1)

  1. 将“对象创建”日期存储在要处理的实例中。
  2. DateTimeFieldauto_now_add一起使用,以将字段设置为现在第一次创建对象时的位置。
  3. 在删除之前比较创建以来已经过了多少天,在执行delete()django signals pre-delete来计算实例的寿命之前,请使用timedelta触发检查。
  4. raise相应的错误&catch必要时

专业提示:如果您编写模型方法obj.can_delete(self, user),则可以在此处编写2和3的逻辑,而不必在应用程序的不同部分中使用它,那么您可以先询问can_delete(user)为了显示警告或停用按钮,user实例适用于条件语句,只允许超级用户忽略年龄竞争而删除。

答案 1 :(得分:0)

一种解决方案是重写模型的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