如何使用两个或多个列表进行查询集过滤?

时间:2018-12-03 10:45:11

标签: python django python-3.x django-2.0

我想为模型建立一个包含两个或更多列表的过滤器

例如: 我正试图那样做

from django.db.models import Q

rq = ['a', 'b', 'c', 'd', 'e'...]

transact = Transact.objects.filter( Q(request__in=rq) | Q(area__in=rq))

但是仅采用第二种方法是行不通的,在这种情况下,它是area

类似的东西,但带有列表

Transact.objects.filter(Q(request='c')| Q(area='d'))

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

Q在SQL语言中等效于OR。如果希望找到request__in=rqarea__in=rq的交集值,则应使用与AND子句等效的普通过滤器机制。

rq = ['a', 'b', 'c', 'd', 'e'...]

transact = Transact.objects.filter(request__in=rq,area__in=rq)

编辑:可以使用以下方法来代替Q(因为这不是您所要解决的问题):

rq = ['a', 'b', 'c', 'd', 'e'...]
result = Transact.objects.filter(request__iregex=r'(' + '|'.join(rq) + ')', area__iregex=r'(' + '|'.join(rq) + ')')