我正在做一个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