考慮以下幾點:Django的post_save信號發送過時的在線表單集
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(...)
現在我想與orderform細節發送一封電子郵件,每當有人創建一個或修改之一。
到目前爲止還沒有火箭科學..讓我們只是使用post_save信號;
post_save.connect(email_notify, sender=OrderForm)
但是有一個小小的問題,傳遞給email_notify與預期新的數據更新OrderForm對象,但沒有相關的OrderFormLine項目。我已經試圖覆蓋管理員和模型中的保存方法,我試圖保存對象,表單和它的關係,然後將它傳遞給我的通知處理程序,沒有任何工作。
我知道我可以將post_save信號附加到OrderItem模型,但隨後會爲每個項目發送電子郵件。
幫助我處於瘋狂的邊緣。
UPDATE:
Found a simple and reliable solution
短篇小說:
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)
您必須保存訂單,以便擁有與您的訂單項關聯的有效ID號。在我看來,定製信號是有序的;這可以使你免於瘋狂。有時候,特殊情況不是邪惡的,這是一個非常小的特例。 「OrderForm」在完全實例化時發出信號,並且您的監聽器等待而不是post_save。 – 2010-11-06 03:41:32
我從來沒有聽說過編寫自定義信號..我無法找到關於這個問題的很多內容。從我所瞭解的信號在django中緊密耦合在一起,並沒有提供定製信號的機制。有記錄嗎? – 2010-11-06 03:52:00
沒關係,找到文檔 – 2010-11-06 03:53:20