您CharField
最有可能存储空字符串,而不是 NULL
关于空字段值的 Django 文档
Field.null
如果为 True,Django 会将空值作为 NULL 存储在数据库中。默认为假。
请注意,空字符串值将始终存储为空字符串,而不是 NULL。仅对非字符串字段(例如整数、布尔值和日期)使用 null=True。对于这两种类型的字段,如果您希望在表单中允许空值,您还需要设置 blank=True,因为 null 参数仅影响数据库存储(请参阅空白)。
除非您有充分的理由,否则请避免在基于字符串的字段(例如 CharField 和 TextField)上使用 null。如果基于字符串的字段具有 null=True,这意味着它有两个可能的“无数据”值:NULL 和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的;Django 约定是使用空字符串,而不是 NULL。
尝试将您的查询更改为:
People.objects.filter(lastname="").count()
Empty is not the same as NULL. You would have needed to set your fields to have null=True
, which as the docs suggest, is not recommended for a CharField.