user11301070
user11301070

Reputation:

How to combine two filters from two models?

How to combine two filters from two models?

Must be work as 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))

Upvotes: 0

Views: 73

Answers (2)

Pavan Kumar T S
Pavan Kumar T S

Reputation: 1559

you can use django Q with &

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))

Upvotes: 1

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477318

Given I understood it correctly, you can do this with two filter statements where you join on the Condition model, like:

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

This yields a query like:

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

Upvotes: 0

Related Questions