我想编写一个相当于这个SQL查询的Django查询:
SELECT * FROM user WHERE name LIKE '%danny%' AND name LIKE '%jack%' AND name LIKE '%peter%' ...
在Django
中,我有一个列表,例如:
lst=['danny','jack','peter']
如何构造Djagno queryset
滤波器?
发布于 2015-07-07 13:59:34
使用Q操作符:
queryargs = [Q(name__contains=i) for i in lst]
queryset = User.objects.filter(*queryargs)
更新
我已经回答了这个问题,但是给出了你关于如何获得组合的第二个扩展的问题。
SELECT * FROM user WHERE (name LIKE '%danny%' AND name LIKE '%jack%' AND name LIKE '%peter%') OR (family LIKE '%danny%' AND family LIKE '%jack%' AND family LIKE '%peter%')
这应该是可行的:
from django.db.models import Q
qname = Q()
for i in lst:
qname &= Q(name__contains=i)
qfamily = Q()
for i in lst:
qfamily &= Q(family__contains=i)
queryset = Data.objects.filter(qname | qfamily)
https://stackoverflow.com/questions/31279880
复制相似问题