Я использую 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, которые не являются моим прецедентом. https://docs.djangoproject.com/es/1.9/ref/signals/#post-save в django docs не упоминает прямой способ сделать это.
Ответ в приведенной ниже ссылке выглядит многообещающим, но я не знаю, как его использовать. Я не уверен, поддерживает ли последняя версия django или нет, потому что я использовал ipdb
для отладки этого и обнаружил, что переменная instance
не имеет атрибута has_changed
, как указано в следующем ответе.
Django: при сохранении, как вы можете проверить, изменилось ли поле?