Получить кверисет "Foo" отношений ForeignKey для исходного кверисета "Bar"?
У меня простые ForeignKey отношения:
class Foo(models.Model):
id = UUIDField()
class Bar(models.Model):
id = UUIDField()
foo = ForeignKey(foo)
Если у меня есть начальный queryset из Bar объектов, как я могу получить кверисет связанных Foo объектов для каждого соответствующего Bar?
В настоящее время я делаю это, но мне интересно, есть ли лучший способ:
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.
Вы можете просто сделать;
bar_qs = Bar.objects.all().select_related("foo")
foos = []
for i in bar_qs:
foos.append(i.foo)
Попробуйте этот запрос:
Foo.objects.filter(bar_set__in=Bar.objects.all())