在 Django 中的 save() 中执行 delete()



我正在做一个Django/Wagtail项目。我正在尝试构建一个非常自定义的功能,该功能要求在满足某些条件时点击"保存"按钮时删除对象。

我覆盖了保存方法:

def save(self, *args, **kwargs):
    if condition:
        return super(ArticleTag, self).delete()
    else:
        return super(ArticleTag, self).save(*args, **kwargs)

我知道这看起来很奇怪,完全不建议,但这正是我想要实现的行为。

有没有更好或"正确"的方法可以做到这一点?

是否有其他步骤可以完全重现行为,就像用户直接点击删除一样?

如果数据库中已存在该对象,则可以执行以下操作:

def save(self, *args, **kwargs):
    if condition:
        self.delete() # you do not need neither to return the deleted object nor to call the super method. 
    else:
        return super(ArticleTag, self).save(*args, **kwargs)

使用信号接收器

signals.py

from django.dispatch import receiver
from django.db.models.signals import post_save
__all__ = ['check_delete_condition']
@receiver(post_save, sender="yourapp.yourmodel")
def check_delete_condition(instance, raw, created, using, updatefields, **kwargs):
    if condition:
        instance.delete()

在您的 apps.py 中,您无法输入信号

from .signals import *
#rest of code

最新更新