Django ORM中如何实现OR查询?SQL转ORM写法求助
Django ORM实现OR条件的解决方案
嘿,我来帮你搞定这个OR条件的问题!Django的filter方法默认用逗号分隔的查询条件是AND关系,要实现SQL里的OR逻辑,咱们得用到Django ORM提供的Q对象。
步骤1:导入Q对象
首先要先从Django的模型模块里导入Q:
from django.db.models import Q
步骤2:改写你的查询语句
把原来的代码改成用Q对象加|符号(代表OR)来连接条件:
offer_list = offer.objects.filter(Q(country_id=1) | Q(mundial=1))
这个写法完全等价于你给出的SQL语句:
SELECT * FROM offer WHERE country_id = 1 OR mundial = 1;
额外实用技巧
- 多OR条件拼接:如果需要多个OR逻辑,继续用
|连接即可:offer_list = offer.objects.filter(Q(country_id=1) | Q(mundial=1) | Q(status='available')) - 混合AND与OR:要是需要组合AND和OR逻辑(比如
(A OR B) AND C),可以把OR条件用括号包裹,再跟AND条件用逗号分隔:offer_list = offer.objects.filter((Q(country_id=1) | Q(mundial=1)), is_published=True) - NOT逻辑:用
~符号可以实现NOT条件,比如排除country_id=2的记录:offer_list = offer.objects.filter(~Q(country_id=2))
小提醒:尽量别用list作为变量名哦,这是Python的内置类型,容易引发不必要的错误,换成offer_list这类更具语义的名字会更规范~
内容的提问来源于stack exchange,提问作者Sergio Mendez
相关产品推荐
相关产品推荐

