#django
#django
Вопрос:
У меня есть внутреннее соединение:
SELECT c.name, b.name FROM company c
INNER JOIN branch b ON b.company_id = c.id
WHERE c.id = 5 AND b.employees > 10;
Что я получил 3 регистра.
Как мне сделать этот запрос в Django, чтобы возвращать только 3 регистра?
c = Company.objects.prefetch_related("comp_branches").filter(id=5, comp_branches__employees__gt=10)
c[0].comp_branches.all() # returns 5 registers
Ответ №1:
Вы можете использовать Prefetch
объект [Django-doc]:
from django.db.models import Prefetch
c = Company.objects.prefetch_related(
Prefetch('comp_branches', Branch.objects.filter(employees__gte=10))
).filter(id=5)
Вот Brach
модель, на которую нацелен comp_branches
, поэтому это может быть по-другому.
Если вы .filter()
, вы не фильтруете связанные объекты, которые вы предварительно выбираете, поскольку это делается в отдельном запросе. Это comp_brances__employees__gte=10
удалит только Company
s из тех QuerySet
, у которых нет brach с 10 или более сотрудниками.