保存模型后,我正在使用django的post_save信号执行一些语句。
class Mode(models.Model):
name = models.CharField(max_length=5)
mode = models.BooleanField()
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Mode)
def post_save(sender, instance, created, **kwargs):
# do some stuff
pass
现在,我想根据
mode
字段的值是否已更改执行一条语句。@receiver(post_save, sender=Mode)
def post_save(sender, instance, created, **kwargs):
# if value of `mode` has changed:
# then do this
# else:
# do that
pass
我查看了一些SOF线程和一个博客,但找不到解决方案。他们所有人都试图使用pre_save方法或非我用例的形式。 django文档中的https://docs.djangoproject.com/es/1.9/ref/signals/#post-save没有提到执行此操作的直接方法。
以下链接中的答案看起来很有希望,但我不知道如何使用。我不确定最新的django版本是否支持它,因为我使用
ipdb
进行了调试,发现instance
变量没有属性has_changed
,如下面的答案所述。Django: When saving, how can you check if a field has changed?
最佳答案
将其设置在模型的__init__
上,以便您可以访问它。
def __init__(self, *args, **kwargs):
super(YourModel, self).__init__(*args, **kwargs)
self.__original_mode = self.mode
现在您可以执行以下操作:
if instance.mode != instance.__original_mode:
# do something useful