如何在Django Admin中获取ManyToManyField的当前值?

时间:2016-02-22 14:05:45

标签: python django django-models

在我的模型中,我有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()的值是我加载表单时的值。

例如,如果我在列表中有两个选定的项目(ab),我取消选择b并点击Save按钮,{{1} } self.field.all()时间仍为save()a。如果我再次修改该项目,我会看到b未被选中,我会选择它,并且在b时间save()仅为self.field.all()

我的假设是在a方法之后处理未选择的项目,尽管我没有在Django文档中找到引用。

有没有办法在save()时间获取更新列表?如果没有,是否有一个方法可以重载以处理模型定义中的列表更新?

注意:也欢迎替代品。)

1 个答案:

答案 0 :(得分:1)

有关m2m行为的类似问题:

Django: accessing ManyToManyField objects after the save

您调用save()时没有获得更新数据的原因是因为Django稍后会处理多对多关系更改,并且可以通过m2m_changed signal访问它。

希望这有帮助,

此致