python - 为什么 Django 在 SQL 子句中添加“IS NOT NULL”?
问题描述
我有模型:
class Profile:
...
phone = models.CharField(max_length=50, blank=True, null=True)
...
当我运行查询集时:
Profile.objects.exclude(phone='', phone__isnull=True).values('phone')
它创建 SQL 代码:
SELECT "user_profile_profile"."phone" FROM "user_profile_profile" WHERE NOT ("user_profile_profile"."phone" IS NULL AND "user_profile_profile"."phone" = '' AND "user_profile_profile"."phone" IS NOT NULL); args=('',)
这是错误的,因为它返回所有电话包括电话=无和电话=''。
解决方案
您需要将exclude
条件拆分为两部分:
Profile.objects.exclude(phone='').exclude(phone__isnull=True).values('phone')
或使用Q
对象
from django.db.models import Q
Profile.objects.exclude(Q(phone='')|Q(phone__isnull=True)).values('phone')
推荐阅读
- azure - Azure DSC 配置问题
- java - 使用 META-INF\services 为 Jboss 模块扩展创建 jar
- generics - 除了上限之外,Kotlin 是否有任何通用约束?
- python - Django REST - 元数据中 ForeignKey 相关模型的 URL(选项)
- sas - if 子句中的日期时间比较
- clickonce - ClickOnce:无法下载应用程序
- python - 硒 python link_text.click()
- postgresql - 如何在 Sequelize 中实现 JOIN
- python - 改变端口的Websockets?我怎样才能把它们全部抓住:) 8050、8053、8073..等
- getstream-io - 创建私人和公共提要的最佳方式