我有一个与User模型具有ManyToMany关系的模型:
class ExtraModel(models.Model):
...
extra_relation = models.ManyToManyField(User, blank=True, related_name='extra_relation')
我想在将用户添加到此ManyToMany字段时向用户发送电子邮件。我们可以随时添加它们,这通常不止一次(即一次添加几个用户)。
我一直在调查最佳方法,我认为它会使用m2m_changed
信号。似乎Django(或者至少通过管理面板)首先清除所有关系,然后再将它们重新插入。看看发出的信号,我看到' pre_clear',' post_clear',' pre_add'和' post_add'。
问题在于' pk_set' in' pre_add'和' post_add'是相同的,并且' pre_clear' &安培; ' post_clear'没有任何' pk_set'属性。因此,即使我可以在' pre_clear'中找出如何收集pks的方法。 (我不知道该怎么做),然后我必须保存它们以便在“post_save”中进行比较。阶段(计算出添加了哪些用户。
这样做有好办法吗?使用信号或其他东西。
答案 0 :(得分:0)
使用m2m_changed信号,你在正确的轨道上。
您需要做的就是等待每个m2m被添加,作为发送者通过表格传递:
m2m_changed.connect(method, sender=ExtraModel.extra_relation.through)
然后在你的方法中:
method(sender, instance, **kwargs):
extra_relations = instance.extra_relations.all()
...
HTH!
此致