Примите во внимание следующее:
class OrderForm(models.Model):
title = models.CharField(max_length=100)
desc = models.TextField()
class OrderFormLine(models.Model):
order = models.ForeignKey(OrderForm)
lagel = models.CharField(max_length=100)
qty = models.IntegerField(...)
price = models.FloatField(...)
Теперь я хочу отправить электронное письмо с деталями формы заказа всякий раз, когда кто-то создает или изменяет форму.
Пока никаких ракетостроений ... давайте просто воспользуемся сигналом post_save;
post_save.connect(email_notify, sender=OrderForm)
Но там ' Одна крошечная проблема: объект OrderForm, переданный в email_notify, обновляется новыми данными, как и ожидалось, но не соответствующими элементами OrderFormLine.
Я попытался переопределить методы сохранения в админке И в модели, я попытался сохранить объект, форму и его отношение перед передачей их обработчику уведомлений, ничего не работает.
Я ' Я знаю, что могу прикрепить сигнал post_save к модели OrderItem, но тогда электронное письмо будет отправлено для каждого элемента.
Помогите, я на грани безумия.
ОБНОВЛЕНИЕ :
Найдено простое и надежное решение
Краткая история:
def email_notify_orderform(sender, **kwargs):
instance = kwargs['instance']
ct = ContentType.objects.get_for_model(OrderForm)
if ct.id == instance.content_type.id:
print instance.is_addition()
print instance.is_change()
print instance.is_deletion()
print instance.change_message
print instance.action_time
print instance.get_edited_object().total() # BINGO !
post_save.connect(email_notify_orderform, sender=LogEntry)