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

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

我想检查标题字段是否已填写,该如何实现?
3个回答

3
所以,对于这个问题,Django文档中关于querysetsq objects的部分将会是你的朋友。
首先需要说明的是,在SQL中,null''(空)是两个不同的值。如果你理解了SQL和Django ORM,检查某些内容是否为null''(空)就会变得更加容易。
基本上,根据用例,你可以执行三种检查:
  1. 结果是否为空 - YourModel.objects.filter(title='')
  2. 结果是否为null - YourModel.objects.filter(title__isnull=True)
  3. 结果是否为null或空(使用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)>]>


0

您可以通过isnull来检查一个字段是否为空。

YourModel.objects.filter(title__isnull=True)

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


-1
我正在尝试检查标题字段是否填写或为空,我该如何实现? blank 不是一个值。空白意味着表单中不需要该字段(它不会显示)。通常如果 blank=True,那么 null=True 也是这样(或者你需要提供一个明确的默认值)。
你可以使用 Python 中等同于 NULLNone,例如:
MyModel.objects.filter(<b>title=None</b>)

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

MyModel.objects.filter(<b>title__isnull=True</b>)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接