我有一个简单的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')