在我的代码中,我有一些过滤条件,在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
答案 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。