Django ORM : checking if a field is blank or filled

标签 django django-orm

<分区>

title = models.ForeignKey(blank=True, null=True)

我正在尝试检查 title filed 是填充还是空白,我该如何实现?

最佳答案

为此,Django 文档围绕 querysetsq objects会成为你的 friend 。

检查某物是否为 null''(空)一开始有点棘手,但一旦您理解了 SQL 和 Django ORM,它就会变得更容易。

首先要说明的是 null != '' 在 SQL 中它们是两个不同的值。这篇文章的前两个答案是不正确的,因为他们没有阅读您的问题。

基本上,您可以根据用例执行三项检查,

  1. 结果是否为空 - YourModel.objects.filter(title='')
  2. 结果是否为空 - YourModel.objects.filter(title__isnull=True)
  3. 结果是否为空(使用 Q objects )- YourModel.objects.filter(Q(title='') | Q(title__isnull=True))

在您的情况下,您需要选项 3,因为您要求的结果集在结果集中显示 null 和空值。

例子:

#  models.py
class TestModel(models.Model):
    a = models.CharField(max_length=10, blank=True, null=True)

#  code
TestModel.objects.create() # id: 0
TestModel.objects.create(a='') # id: 1
TestModel.objects.create(a='a value') # id: 2

# option 1 above
TestModel.objects.filter(a__isnull=True)
#> <QuerySet [<TestModel: TestModel object (1)>]>

#option 2 above
TestModel.objects.filter(a='')
#> <QuerySet [<TestModel: TestModel object (2)>]>

#option 3 above
from django.db.models import Q
TestModel.objects.filter(Q(a='') | Q(a__isnull=True))
#> <QuerySet [<TestModel: TestModel object (1)>, <TestModel: TestModel object (2)>]>

关于 Django ORM : checking if a field is blank or filled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57110082/

相关文章:

单独文件中的 Javascript 在 Django 中不起作用

python - 使用 Enum 时 Admin 中的 Django 选择

从遗留数据库加载数据后,Django ORM 无法自动设置模型的主键

django - 加入不相关的模型并从查询集中删除重复项

django - 使用 QuerySet.values() 时获取模型实例

python - 创建用于 Django 的 PostgreSQL 数据库

python - 子类化基本 Django 通用 View 时缺少 META 属性?

Python: 'import *' 与 execfile

python - Django查询一次获取三个对象

python - 如何让Django返回一个模板,但在返回模板后继续执行一个进程?