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

Posted

技术标签:

【中文标题】如何在 Django Admin 中获取 ManyToManyField 的当前值?【英文标题】:How can I get current values for a ManyToManyField in Django Admin? 【发布时间】:2016-02-22 14:05:44 【问题描述】:

在我的模型中,我有一个 ManyToManyField 而不是另一个模型:

class A(models.Model):
    ...

class B(models.Model):
    field = models.ManyToManyField(A)

假设我用一些值对field 进行了更新,我试图获取用户在点击Save 按钮之前取消选择的项目的列表。为此,我在B 中重载了save() 方法:

def save(self, *args, **kwargs):
    super(B, self).save(*args, **kwargs)
    print self.field.all()

但是,当点击Save 按钮时,我得到的self.field.all() 的值是我加载表单时的值。

例如,如果我在列表中有两个选定的项目(ab)并且我取消选择 b 并点击 Save 按钮,self.field.all() save() 时间仍然是 @987654336 @ 和 b。如果我再次编辑该项目,我会看到 b 未选中,我将其选择回来,在 save() 时间 self.field.all() 仅是 a

我的假设是在 save() 方法之后处理未选择的项目,尽管我在 Django 文档中没有找到参考。

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

注意:也欢迎替代品。)

【问题讨论】:

【参考方案1】:

关于 m2m 行为有一个类似的问题:

Django: accessing ManyToManyField objects after the save

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

希望这会有所帮助,

问候

【讨论】:

以上是关于如何在 Django Admin 中获取 ManyToManyField 的当前值?的主要内容,如果未能解决你的问题,请参考以下文章

Django,在管理员中更多2个

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

如何在 django admin 中获取对象的历史记录?

Django admin - 如何获取模板标签中的所有注册模型?

Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL

我一直在/ admin / login /获取RelatedObjectDoesNotExist。如何通过一对一关系在Django中成功创建用户配置文件?