简体   繁体   English

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

[英]How to perform AND condition in django queryset?

I want to write a Django query equivalent to this SQL query: 我想编写一个与此SQL查询等效的Django查询:

SELECT * FROM user WHERE name LIKE '%danny%' AND name LIKE '%jack%' AND name LIKE '%peter%' ...

In Django , i have a list for example : Django ,我有一个列表,例如:

lst=['danny','jack','peter']

How to construct the Djagno queryset filter? 如何构造Djagno queryset过滤器?

Use the Q operator: 使用Q运算符:

queryargs = [Q(name__contains=i) for i in lst]
queryset = User.objects.filter(*queryargs)

UPDATE 更新

I have answered the question, but given your second, expanded question on how to obtain the combination 我已经回答了这个问题,但是考虑到您的第二个扩展问题,即如何获得组合

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

this should work: 这应该工作:

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