繁体   English   中英

如何在Django queryset中执行AND条件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM