如何在Django过滤器中同时使用OR和AND条件?

时间:2019-02-11 13:58:23

标签: django django-views

在我的代码中,我有一些过滤条件,在django过滤器中一些AND条件之间必须使用OR条件。这是我的代码

  def get_initial_queryset(self):
     filterCondition={'iType':1}
     if status:
         statusCondition={'iApprovedStatus': status}
         filtercondition.update(statusCondition)
     .......
     EIDlist=[1,2,5,7]
     EIDcondition={'EID__in':EIDlist]
     TIDlist=[5,8,9,10]
     TIDcondition={'TID__in':TIDlist]
     filtercondition.update(EIDcondition)
     filtercondition.update(TIDcondition)
     executeQuery = ENTITY_TEMPLATES.objects.filter(**filterCondition).order_by('-dtCreatedOn')

在这里,我需要在EIDlist和TIDlist之间应用OR条件。但是,在filtercondition中它将作为AND并且我得到了错误的结果集。我该如何查询? 有什么建议么? -TIA

1 个答案:

答案 0 :(得分:1)

您需要使用Q对象来执行这种逻辑。请参阅official documentation

这是一个简单的例子:

from django.db.models import Q

ENTITY_TEMPLATES.objects.filter(
    Q(EID__in=EIDlist) | Q(TID__in=TIDlist),  # 1
    iType=1,  # 2
    iApprovedStatus=status  # 3
)

您最终得到以下逻辑:(1)AND 2 AND 3,其中(1)包含一个OR。请注意,,暗含AND。