我想为模型建立一个包含两个或更多列表的过滤器
例如: 我正试图那样做
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'))
有什么想法吗?
答案 0 :(得分:2)
Q在SQL语言中等效于OR
。如果希望找到request__in=rq
和area__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) + ')')