Как совместить два фильтра из двух моделей? - PullRequest
0 голосов
/ 22 июня 2019

Как совместить два фильтра из двух моделей?

Должен работать как AND (&)

Credit.objects.filter(id__in=CreditPayment.objects.filter(security='Deposit - deposit').values('credit__id').distinct(), bank__id=1))

Credit.objects.filter(id__in=Condition.objects.filter(purpose=3).values('credit__id').distinct(), bank__id=1))

Ответы [ 2 ]

2 голосов
/ 22 июня 2019

вы можете использовать django Q с &

from django.db.models import Q
Credit.objects.filter(Q(id__in=CreditPayment.objects.filter(security='Deposit - deposit').values('credit__id').distinct()) & Q(id__in=Condition.objects.filter(purpose=3).values('credit__id').distinct()), bank__id=1))
1 голос
/ 22 июня 2019

Если я правильно понял, вы можете сделать это с помощью двух операторов фильтра, к которым вы присоединяетесь на модели Condition, например:

Credit.objects.filter(
    bank__id=1,
    condition__security='Deposit - deposit'
).filter(
    condition__purpose=3
)<b>.distinct()</b>

. Это приводит к следующему запросу:

SELECT DISTINCT credit.*
FROM credit
INNER JOIN condition ON credit.id = condition.credit_id
INNER JOIN condition T3 ON credit.id = T3.credit_id
WHERE credit.bank_id = 1
  AND condition.security = Deposit - deposit
  AND T3.purpose = 3
...