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

Execute delete() within save() in Django

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

我覆盖了保存方法:

def save(self, *args, **kwargs):

    if condition:
        return super(ArticleTag, self).delete()

    else:
        return super(ArticleTag, self).save(*args, **kwargs)

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

是否有更好的或 "correct" 方法来做到这一点?

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

如果对象已经存在于你的数据库中,你可以这样做:

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