【发布时间】:2016-08-11 16:49:54
【问题描述】:
我正在使用 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?
【问题讨论】:
标签: python django django-models django-signals