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

How to queryset filter with two or more lists?

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

例如: 我正在尝试这样做

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

有什么想法吗?

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