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

Get "Foo" queryset of ForeignKey relationships for initial "Bar" queryset?

我有一个简单的 ForeignKey 关系:

class Foo(models.Model):
  id = UUIDField()

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

如果我有 querysetBar 对象的初始 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)

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

如果 foos 列表没问题,你可以这样做;

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')

试试这个查询:

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