Django ORM:检查字段是空白还是已填充
Django ORM: checking if a field is blank or filled
title = models.ForeignKey(blank=True, null=True)
我正在尝试检查 title filed 是填充还是空白,我该如何实现?
您可以通过isnull
检查字段是否为空
YourModel.objects.filter(title__isnull=True)
这将 return 所有没有标题的 objects。
I am trying to check if title filed is filled or blank, how can i achieve this?
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>)
因此,querysets and q objects 周围的 Django 文档将成为您的朋友。
一开始检查是 null
还是 ''
(空)有点棘手,但是一旦你理解了 SQL 和 Django ORM,它就会变得更容易。
首先要说明的是 null != ''
和 SQL 它们是两个不同的值。前两个对此 post 的回答不正确,因为他们没有阅读您的问题。
基本上,您可以根据用例执行三项检查,
- 结果是否为空 -
YourModel.objects.filter(title='')
- 结果是否为空 -
YourModel.objects.filter(title__isnull=True)
- 结果是否为 null 或空(使用 Q objects)-
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)>]>
title = models.ForeignKey(blank=True, null=True)
我正在尝试检查 title filed 是填充还是空白,我该如何实现?
您可以通过isnull
YourModel.objects.filter(title__isnull=True)
这将 return 所有没有标题的 objects。
I am trying to check if title filed is filled or blank, how can i achieve this?
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>)
因此,querysets and q objects 周围的 Django 文档将成为您的朋友。
一开始检查是 null
还是 ''
(空)有点棘手,但是一旦你理解了 SQL 和 Django ORM,它就会变得更容易。
首先要说明的是 null != ''
和 SQL 它们是两个不同的值。前两个对此 post 的回答不正确,因为他们没有阅读您的问题。
基本上,您可以根据用例执行三项检查,
- 结果是否为空 -
YourModel.objects.filter(title='')
- 结果是否为空 -
YourModel.objects.filter(title__isnull=True)
- 结果是否为 null 或空(使用 Q objects)-
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)>]>