获取初始 "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)
如果我有 queryset
个 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)
您使用 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())
我有一个简单的 ForeignKey
关系:
class Foo(models.Model):
id = UUIDField()
class Bar(models.Model):
id = UUIDField()
foo = ForeignKey(foo)
如果我有 queryset
个 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)
您使用 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())