gpt4 book ai didi

django - 在 Django 模型中,如何防止基于特定字段的删除?

转载 作者:行者123 更新时间:2023-12-02 05:20:18 25 4
gpt4 key购买 nike

在下面,我有一个 Post 模型。 Post 对象有一个 status 字段,可以是 'unpublished''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 方法将不起作用。我读过不要使用接收器,但我不确定为什么。

最佳答案

这是我对 @Todor 的评论的看法:

signals.py中:

from django.db.models import ProtectedError
from django.db.models.signals import pre_delete
from django.dispatch import receiver

from .models import Post

@receiver(pre_delete, sender=Post, dispatch_uid='post_pre_delete_signal')
def protect_posts(sender, instance, using, **kwargs):
if instance.status is 'unpublished':
pass
else: # Any other status types I add later will also be protected
raise ProtectedError('Only unpublished posts can be deleted.')

我欢迎改进或更好的答案!

关于django - 在 Django 模型中,如何防止基于特定字段的删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38419928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com