Различают, какое поле изменилось в signal.instance, Django / сигналов - PullRequest
0 голосов
/ 19 июня 2019

Допустим, у меня есть модель с названием BookModel с 4 полями: (название, автор, цена, publish_year).

И у меня есть обработчик в сигналах:

@receiver([post_save, post_delete], sender=BookModel)
def signal_handler(sender, instance, **kwargs):
…..

Вопроскак отличить ситуацию, когда конкретное поле модели изменилось во время сохранения ().Например, если цена изменилась, я хочу делать вещи.Лучше объяснить в псевдокоде ...

@receiver([post_save, post_delete], sender=BookModel)
def signal_handler(sender, instance, **kwargs):
# pseudo code bellow
if field “price” has changed:
    do stuff
else:
    do nothing

Согласно документам, если я использую «update_fields» в save () - это возможно, но что, если я не буду его использовать ???

Также возможно ли отличить ситуацию, когда я получил сигнал от post_save или от post_delete, все еще используя 1 обработчик?

@receiver([post_save, post_delete], sender=BookModel)
def signal_handler(sender, instance, **kwargs):
# pseudo code bellow
if signal is post_save:
    if field “price” has changed:
        do stuff
    else:
        do nothing
else:
    do other stuff

Спасибо

1 Ответ

1 голос
/ 19 июня 2019

Вы можете попробовать django-model-utils FieldTracker для отслеживания изменений в полях модели.Он также используется с сигналом post_save.

Проверка изменений с использованием сигналов

Методы полевого трекера также могут использоваться в обработчиках сигналов pre_save и post_save для определения изменений полей при сохранении модели.

...