【发布时间】:2016-07-17 09:45:50
【问题描述】:
在下面,我有一个Post 模型。 Post 对象有一个 status 字段,可以是 'unpublished' 或 'published'。
if status is 'published',我想防止对象被删除,并希望将这个逻辑封装在模型本身中。
from model_utils import Choices # from Django-Model-Utils
from model_utils.fields import StatusField
class Post(model.Models)
STATUS = Choices(
('unpublished', _('Unpublished')),
('published', _('Published')),
)
...
status = StatusField(default=STATUS.unpublished)
我该怎么做?如果使用QuerySet 批量删除对象,则覆盖delete 方法将不起作用。我读过不要使用接收器,但我不知道为什么。
【问题讨论】:
-
当您通过 QuerySet.delete() 删除时,会调用一个预删除事件,因此监听它并引发 ProtectedError 应该可以解决问题。
-
我在文档中找不到 - 你能指点我吗?我以为那不会发出信号。
-
pre_delete。我正在通过电话写信,如果您以后没有收到,我无法提供完整的答案,我可以尝试提供一个。
-
谢谢,我已经添加了一个基于此的答案
标签: django django-models overriding receiver