Django ORM:检查字段是否为空白或已填充

时间:2019-07-19 10:04:13

标签: django django-orm

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

我正在尝试检查标题字段是否已填充或空白,我该如何实现?

3 个答案:

答案 0 :(得分:1)

Name: <MY_DESTINATION> Type: HTTP URL: http://... //this matches the cloud connector host, i.e. in SAP Cloud Platform Cockpit --> Cloud Connectors --> Exposed Back-End Systems ProxyType: OnPremise Authentication: BasicAuthentication User: <USERNAME> Password: <PASSWORD> 可以检查字段是否为空

isnull

这将返回所有没有标题的对象。

答案 1 :(得分:-1)

  

我正在尝试检查标题字段是否已填充或空白,我该如何实现?

blank 不是一个值。空白表示该字段不需要表格(不会显示)。通常,如果是blank=True,则也要null=True(或者您需要提供一个明确的默认值)。

您可以使用None,它等效于Python NULL,例如:

MyModel.objects.filter(title=None)

或者您可以使用__isnull [Django-doc]查找使它更明确:

MyModel.objects.filter(title__isnull=True)

答案 2 :(得分:-1)

为此,querysetsq objects周围的Django文档将成为您的朋友。

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

首先要说明的是SQL中的null != '',它们是两个不同的值。该帖子的前两个答案不正确,因为它们尚未准备好您的问题。

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

  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,因为它要求一个结果集,该结果集显示结果集中的空值和空值。

示例:

#  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)>]>