我想为Django中的对象删除设置时间限制。
例如,用户可以在3天内删除他们提交的对象;一旦过去了3天,他们将无法再删除该对象。之后,只有超级用户才能删除它。
我该如何实现?我尝试了很多方法,但是没有办法...有人可以提供解决方案吗?
答案 0 :(得分:1)
DateTimeField
与auto_now_add一起使用,以将字段设置为现在第一次创建对象时的位置。
delete()
和django signals pre-delete来计算实例的寿命之前,请使用timedelta触发检查。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