【发布时间】:2012-07-22 16:13:08
【问题描述】:
我想在保存模型实例时发送一封电子邮件。为此,我会监听 post_save 信号:
#models.py
@receiver(post_save, sender=MyModel, dispatch_uid="something")
def send_email(sender, **kwargs):
instance = kwargs['instance']
email = ModelsEmailMessage(instance)
email.send()
在我看来,我会处理表单并将订阅者附加到对象:
#views.py
object = form.save()
object.subscribers.add(*users)
我的问题是表单保存在添加用户之前触发了 post_save 信号。
但如果我这样做:
object = form.save(commit=False)
那么我不能将 m2m 实例添加到没有 id 的对象。
嘿嘿!
【问题讨论】:
-
所以
subscribers是一个m2m 字段,对吧?你不能只在模型的save()方法中发送电子邮件吗? -
@scytale:不,您不能在模型 save() 中进行发送,因为 m2m 引用尚不存在。不会有订阅者,因此不会发送电子邮件。
-
@rantanplan:据我所知,m2m_changed 没有这样做,因为如果有人订阅或取消订阅,我不想给人们发邮件。我想在内容更改时发送邮件。如果我正确理解信号,如果有人进行了更改并且 m2m 没有更改,则不会发送信号。
-
是的,这就是我支持 Rohan 的原因。您必须制作自定义信号。
标签: django django-forms django-signals m2m