[英]How to perform AND condition in django queryset?
我想编写一个与此SQL查询等效的Django查询:
SELECT * FROM user WHERE name LIKE '%danny%' AND name LIKE '%jack%' AND name LIKE '%peter%' ...
在Django
,我有一个列表,例如:
lst=['danny','jack','peter']
如何构造Djagno queryset
过滤器?
使用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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.