次のことを考慮してください。
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)
ただし、小さな問題が1つあります。それは、email_notifyに渡されたOrderFormオブジェクトが期待どおりに新しいデータで更新されますが、関連するOrderFormLineアイテムでは更新されないことです。
管理者とモデルのsaveメソッドをオーバーライドしようとしましたが、通知ハンドラーに渡す前に、オブジェクト、フォーム、およびその関係を保存しようとしましたが、何も機能しません。
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)