Получить кверисет "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())
Вернуться на верх