title = models.ForeignKey(blank=True, null=True)
我想检查标题字段是否已填写,该如何实现?
title = models.ForeignKey(blank=True, null=True)
null
和''
(空)是两个不同的值。如果你理解了SQL和Django ORM,检查某些内容是否为null
或''
(空)就会变得更加容易。YourModel.objects.filter(title='')
YourModel.objects.filter(title__isnull=True)
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)>]>
您可以通过isnull
来检查一个字段是否为空。
YourModel.objects.filter(title__isnull=True)
这将返回所有没有标题的对象。
blank
不是一个值。空白意味着表单中不需要该字段(它不会显示)。通常如果 blank=True
,那么 null=True
也是这样(或者你需要提供一个明确的默认值)。NULL
的 None
,例如:MyModel.objects.filter(<b>title=None</b>)
或者您可以使用__isnull
[Django-doc]查找来使其更加明确:
MyModel.objects.filter(<b>title__isnull=True</b>)