这是我的模特:
class People(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
在views.py
中- 当我尝试这个计算空的姓氏字段时:
People.objects.filter(lastname__isnull=True).count()
虽然有一些空的姓氏字段,但它总是返回0事件。
为什么我得到0,我的代码有什么问题,还是有其他方法来计算表中的空字段?
答案 0 :(得分:3)
您的CharField
最有可能存储空字符串,而不是NULL
Django docs on null field value
Field.null
如果为True,Django会将空值存储为NULL 数据库。默认值为False。请注意,空字符串值将始终存储为空字符串, 不是NULL。仅对非字符串字段使用null = True,例如 整数,布尔值和日期。对于这两种类型的字段,您也可以 如果你想在表格中允许空值,则需要设置blank = True,如 null参数仅影响数据库存储(请参阅空白)。
避免在基于字符串的字段(如CharField和)上使用null TextField,除非你有一个很好的理由。如果是基于字符串的字段 has null = True,这意味着它有两个可能的“无数据”值: NULL和空字符串。在大多数情况下,拥有两个是多余的 “无数据”的可能值; Django约定是使用空的 字符串,而不是NULL。
尝试将您的查询更改为:
People.objects.filter(lastname="").count()
Empty与NULL不同。您需要将字段设置为null=True
,而不建议将其用于CharField。