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
一种解决方案是覆盖模型的
delete()
方法,并在其中添加一个检查,可能如下所示:DateTimeField
和{a1}将字段设置为now。。在delete()
和{a3}来计算实例的年龄。在raise
必要时相应的错误&;catch
pro提示:如果您编写了一个模型方法
obj.can_delete(self, user)
,那么您可以在这里为2和3编写逻辑,而不是让它跨越应用程序的不同部分,然后您可以先询问can_delete(user)
,以便显示警告或停用按钮,user
实例用于条件语句,只允许超级用户删除,而忽略年龄限制。相关问题 更多 >
编程相关推荐