Передача дополнительных атрибутов с сигналами Django - PullRequest
0 голосов
/ 28 февраля 2019

Есть ли способ передать дополнительные параметры экземпляру, который я сохраняю, в БД для последующего доступа к ним после сохранения экземпляра?

Краткий пример моего случая:

Яиспользование сигналов Django в качестве триггеров для событий, таких как отправка подтверждающего электронного письма, выполняемого другими процессами, например рабочими.

Я готов указать, какой экземпляр и когда должен вызывать событие, а какой нет: иногда яхочу, чтобы созданные / обновленные записи вызывали серию событий, а иногда я хочу, чтобы они обрабатывались в режиме без вывода сообщений или выполняли какие-то другие действия.

Одним из решений этого является сохранение требуемого поведения для конкретного экземпляра в поле модели, например JSONFieldи восстановить это поведение на post_save, но это кажется очень уродливым способом решения такой проблемы.

Я использую сигнал post_save в качестве подтверждения того, что экземпляр был правильно сохранен в БД, потому что я нехотите вызвать событие и через мгновение что-то идет не так при сохранении экземпляра в БД.

Экземплярысохранено через Django Forms, подпрограммы и RestFramework Seralizers

1 Ответ

0 голосов
/ 01 марта 2019

Одним из решений является использование произвольного атрибута экземпляра модели (не поля) для сохранения желаемого состояния.Например:

def my_view(request):
    ...
    instance._send_message = True if ... else False
    instance.save()

@receiver(post_save, sender=MyModel)
def my_handler(sender, instance, **kwargs):
    if instance._send_message:
        ...       
...