【发布时间】:2019-11-28 07:23:46
【问题描述】:
title = models.ForeignKey(blank=True, null=True)
我正在尝试检查标题字段是填充还是空白,我该如何做到这一点?
【问题讨论】:
标签: django django-orm
title = models.ForeignKey(blank=True, null=True)
我正在尝试检查标题字段是填充还是空白,我该如何做到这一点?
【问题讨论】:
标签: django django-orm
因此,querysets 和 q objects 周围的 Django 文档将成为您的朋友。
一开始检查某个东西是null 还是''(空)有点棘手,但是一旦您了解了SQL 和Django ORM,它就会变得更容易。
首先要说明的是null != '' 在SQL 中它们是两个不同的值。该帖子的前两个答案不正确,因为他们没有阅读您的问题。
基本上,根据用例,您可以执行三种检查,
YourModel.objects.filter(title='')
YourModel.objects.filter(title__isnull=True)
YourModel.objects.filter(Q(title='') | Q(title__isnull=True))
在您的情况下,您将需要选项 3,因为您要求在结果集中显示空值和空值的结果集。
例子:
# 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)>]>
【讨论】:
您可以通过isnull检查字段是否为空白
YourModel.objects.filter(title__isnull=True)
这将返回所有没有标题的对象。
【讨论】:
我正在尝试检查标题字段是填充还是空白,我该如何做到这一点?
blank 是不是一个值。空白表示表单中不需要该字段(它不会显示)。通常如果是blank=True,那么null=True 也是如此(或者您需要提供一个明确的默认值)。
您可以使用None,它相当于 Python 中的NULL,例如:
MyModel.objects.filter(<b>title=None</b>)
或者您可以使用__isnull [Django-doc] 查找使其更明确:
MyModel.objects.filter(<b>title__isnull=True</b>)
【讨论】: