问题是,在保存了一个具有新m2m_field值的模型实例后,我想自动向其中添加更多相关对象。
class MyModel(models.Model):
m2m_field = models.ManyToManyField("app.RelatedModel")
@receiver(models.signals.m2m_changed, sender=MyModel.m2m_field.through)
def m2m_field_changed(sender, instance, **kwargs):
instance.m2m_field.add(related_object_instance)
这显然会导致一个无限循环,因为在将实例添加到m2m_field后,接收器会再次启动,以此类推。有合适的方法吗?
谢谢你的帮助。
您必须首先检查相关对象之前是否已添加:
@receiver(models.signals.m2m_changed, sender=MyModel.m2m_field.through)
def m2m_field_changed(sender, instance, **kwargs):
if related_object_instance not in instance.m2m_field:
instance.m2m_field.add(related_object_instance)