【发布时间】:2018-09-16 18:53:32
【问题描述】:
我有两个模型,Foo 和 Bar,我创建了一个多对多的关系,通过表 FooBar 自定义。
class Foo(models.Model):
foofield = models.CharField()
class Bar(models.Model):
barfield = models.CharField()
foos = models.ManyToManyField('Foo', through='FooBar', related_name='foo_bar')
class FooBar(models.Model):
foo = models.ForeignKey(Foo, related_name='foobar')
bar = models.ForeignKey(Bar, related_name='foobar')
foobarfield= models.CharField()
我想做的是显示给定 Foo 实例的所有 Bar 记录,并且对于每个这样的记录还显示 foobarfield 的相应值。所以我会得到类似的东西
- barfield_value1, foobarfield_value1
- barfield_value2, foobarfield_value2
- barfield_value3, foobarfield_value3
- ...
我似乎无法构建正确的查询来执行此操作。我尝试了类似的东西
Bar.objects.select_related('foobar').filter(foobar__foo = foo_instance)
因为我希望 foobar 对于 Foo 的给定实例是唯一的,但这似乎不起作用。如何获得我想要的结果?
【问题讨论】:
-
你需要双下划线,所以
foobar__foo=foo_instance。 -
此外,您需要在 prefetch 上进行注释或过滤。
-
好的,我该怎么做呢?
-
对于给定的 Foo 实例, foobar 如何是唯一的? Foo 和 Bar 通过 ManytoManyRelationship (FooBar) 关联。因此,对于给定的 Foo 实例,您可能在 FooBar 表中有多个 Bar 实例。
标签: django django-models