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

2024-05-16 19:36:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我怎么才能做到呢?我尝试了很多方法,但没有一个能做到……有人能帮我解决问题吗?在


Tags: 对象django方法用户时间解决问题
2条回答

一种解决方案是覆盖模型的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
  1. 将“对象创建”日期存储在要处理的实例中。在第一次创建对象时,使用DateTimeField和{a1}将字段设置为now。。在
  2. 在删除比较创建后经过了多少天之后,请使用django signals pre-delete触发一个检查,然后再执行delete()和{a3}来计算实例的年龄。在
  3. raise必要时相应的错误&;catch

pro提示:如果您编写了一个模型方法obj.can_delete(self, user),那么您可以在这里为2和3编写逻辑,而不是让它跨越应用程序的不同部分,然后您可以先询问can_delete(user),以便显示警告或停用按钮,user实例用于条件语句,只允许超级用户删除,而忽略年龄限制。

相关问题 更多 >