Как отправить аргументы kwargs через метод .save() в сигнал post_save?
У меня есть две модели, Process и Notification, и мне нужно создать уведомление, когда процесс сохраняется, поэтому я использую сигнал post_save для этого:
def create_notification(sender, instance, *args, **kwargs):
if instance.status in ["ERR", "FIN"] or instance.percent == 100:
type = kwargs["type"]
notification = Notification()
notification.account = instance.owner
notification.process = instance
notification.status = "UNREAD"
notification.content = instance.description
notification.notification_type = type
if instance.sub_processes.exists():
for sub_process in instance.sub_processes.all():
if sub_process.model_id != "":
notification.model_id = sub_process.model_id
if sub_process.model_name != "":
notification.model_name = sub_process.model_name
notification.save()
это работает нормально, но моя проблема в том, что мне нужно передать дополнительный аргумент, когда я сохраняю процесс, этот аргумент для объекта уведомления, который я создаю, который type
поэтому каждый раз, когда я сохраняю объект Process (например, в представлении), я пытаюсь сделать что-то вроде этого process.save(type="EMM")
но это не работает, строка type = kwargs["type"]
в create_notification signal ничего не делает, так как я могу передать дополнительные аргументы в метод save?
возможно, это может сработать:
# Process model
def save(self, type=None, *args, **kwargs):
...
self._type = type
return super(Process, self).save(*args, **kwargs)
# Process post_save
def create_notification(sender, instance, *args, **kwargs):
if instance._type is None:
return
if instance.status in ["ERR", "FIN"] or instance.percent == 100:
type = instance._type
notification = Notification()
notification.account = instance.owner
notification.process = instance
notification.status = "UNREAD"
notification.content = instance.description
notification.notification_type = type
if instance.sub_processes.exists():
for sub_process in instance.sub_processes.all():
if sub_process.model_id != "":
notification.model_id = sub_process.model_id
if sub_process.model_name != "":
notification.model_name = sub_process.model_name
notification.save()