获取初始"Foo"查询集"Bar"外键关系的查询集?



我有一个简单的ForeignKey关系:

class Foo(models.Model):
id = UUIDField()
class Bar(models.Model):
id = UUIDField()
foo = ForeignKey(foo)

如果我有一个Bar对象的初始queryset,如何为每个相应的Bar获得相关Foo对象的查询集?

我目前正在做这件事,但我想知道是否有更好的方法:

bar_qs = Bar.objects.all().select_related("foo")
foo_ids = []
for i in bar_qs:
foo_ids.append(i.foo.id)
foo_qs = Foo.objects.filter(id__in=foo_ids)

尝试此查询:

Foo.objects.filter(bar_set__in=Bar.objects.all())

使用select_related是正确的,因为它在同一查询中收集了相关的foo对象,因此无需再次查询数据库中的Foo表。

如果一个foo列表是可以的,你可以这样做;

bar_qs = Bar.objects.all().select_related("foo")
foos = []
for i in bar_qs:
foos.append(i.foo)

或者,您可以使用从foo查询集开始;

foo_qs = Bar.objects.select_related('foo').only('foo')

但如果你需要bar_qs,那么你最好做;

bar_qs = Bar.objects.all().select_related("foo")
foo_qs = bar_qs.only('foo')

最新更新