You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的views.py中使用OR运算符筛选指定列?ORM写法正确性及去重方法咨询

Django ORM查询问题解答

嘿,我来帮你理清这个问题~

你的ORM写法是否正确?

你的写法是可以得到预期结果的:通过|操作符合并两个分别过滤male=True和degree=False的QuerySet,并且用values('name','family')指定返回字段,最终会得到符合male=True OR degree=False条件的记录列表。

不过有更简洁的写法推荐给你——使用Django的Q对象来直接实现OR逻辑,代码可读性会更好,尤其是后续条件变复杂时:

from django.db.models import Q

# 更简洁的OR查询写法
students = stu.objects.filter(Q(male=True) | Q(degree=False)).values('name', 'family')

如何去除重复的(name, family)值?

不管用你原来的合并写法还是上面的Q对象写法,都可以通过distinct()方法来实现去重。这个方法会根据你在values()中指定的字段来判断重复项,完美匹配你的需求:

用Q对象的写法去重

students = stu.objects.filter(Q(male=True) | Q(degree=False)).values('name', 'family').distinct()

用你原来的合并写法去重

students = (stu.objects.filter(male=True).values('name','family') | stu.objects.filter(degree=False).values('name','family')).distinct()

需要注意的是,distinct()要放在values()之后(或者合并操作之后),这样才能基于指定的字段进行去重判断。

内容的提问来源于stack exchange,提问作者Darwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 02:57:40