在我的模型中,我有ManyToManyField
个不同的模型:
class A(models.Model):
...
class B(models.Model):
field = models.ManyToManyField(A)
假设我field
有一些值,我试图获取用户在点击Save
按钮之前取消选择的项目列表。为此,我在save()
内重载了B
方法:
def save(self, *args, **kwargs):
super(B, self).save(*args, **kwargs)
print self.field.all()
然而,当点击Save
按钮时,我得到的self.field.all()
的值是我加载表单时的值。
例如,如果我在列表中有两个选定的项目(a
和b
),我取消选择b
并点击Save
按钮,{{1} } self.field.all()
时间仍为save()
和a
。如果我再次修改该项目,我会看到b
未被选中,我会选择它,并且在b
时间save()
仅为self.field.all()
。
我的假设是在a
方法之后处理未选择的项目,尽管我没有在Django文档中找到引用。
有没有办法在save()
时间获取更新列表?如果没有,是否有一个方法可以重载以处理模型定义中的列表更新?
(注意:也欢迎替代品。)
答案 0 :(得分:1)
有关m2m行为的类似问题:
Django: accessing ManyToManyField objects after the save
您调用save()时没有获得更新数据的原因是因为Django稍后会处理多对多关系更改,并且可以通过m2m_changed signal访问它。
希望这有帮助,
此致