考虑以下几点: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