如何在 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()
的值是我加载表单时的值。
例如,如果我在列表中有两个选定的项目(a
和 b
)并且我取消选择 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 Admin 中获取 ManyToManyField 的当前值?
Django admin - 如何获取模板标签中的所有注册模型?
Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL
我一直在/ admin / login /获取RelatedObjectDoesNotExist。如何通过一对一关系在Django中成功创建用户配置文件?