Я использую сигнал 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 не упоминает прямой способ сделать это.
Ответ в ссылке ниже выглядит многообещающе, но я не знаю, как его использовать. Я не уверен, поддерживает ли последняя версия django это или нет, потому что я использовал ipdb
для отладки этого и обнаружил, что переменная instance
не имеет атрибута has_changed
, как упомянуто в ответе ниже.