Django select_related таблица join только для отношения "многие-ко-многим
У меня есть Django приложение с моделью A
с представлением ManyToManyField
bees
к модели B
. Для одного представления, когда я выбираю кучу A, мне также нужны идентификаторы их B. По умолчанию Django запрашивает связанные B для каждого A по отдельности слишком медленно, поэтому я использую select_related
.
Если я делаю A.objects.select_related('bees')
Django выбирает полные B
модели:
SELECT ("app_a_bees"."from_a_id") AS "_prefetch_related_val_from_a_id",
"app_b"."id",
"app_b"."field1",
"app_b"."field2",
...
FROM "app_b"
INNER JOIN "app_a_bees" ON ("app_b"."id" = "app_a_bees"."to_b_id")
WHERE "app_a_bees"."from_a_id" IN (... list of A ids ...)
Но мне нужны только их значения id, поэтому мне нужно выбрать только таблицу app_a_bees
join, чтобы получить их, а не таблицу B
model.
Я пробовал A.objects.select_related('bees__id')
(я также пробовал 'bees_id'
), но Django это не нравится, отдельные поля не могут быть префетчированы таким образом.
Я также пробовал A.objects.select_related(Prefetch("bees", queryset=B.objects.all().only("id"))
, но это все равно соединяется с таблицей B
, чтобы выбрать поле id
, которое Django уже имеет из таблицы join.
Есть ли способ предварительно получить только таблицу объединения для моих A
объектов?