Django:设置后,ManyToMany实例的更新字段

问题描述

使用.set()设置ManyToMany关系时可以做些什么吗?

比方说,我们有:

class ModelA():
  b_models = models.ManyToManyField(ModelB,related_name="as",through="ModelMN")

class ModelMN():
  model_a = models.ForeignKey(ModelA)
  model_b = models.ForeignKey(ModelB)

当我们有一个模型A 的实例和一个模型B 实例的列表时:

a = ModelA()
a.set([b1,b2,b3])

调用.set()时,会为每个a-b关系创建一个 ModelMN 实例。每次创建时,是否可以修改该实例的字段(每个ModelMN实例)?

.save()上覆盖ModelMN方法似乎无法正常工作。

解决方法

我一直在寻找m2m_changed信号。

@receiver(m2m_changed,sender=ModelA.b_models.through)
function do_something(sender,**kwargs):
    ...