2

这是我的模型:

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,我的代码是否有任何问题,或者是否有任何其他方法可以计算表中的空字段?

4

1 回答 1

3

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.

于 2012-10-08T23:28:40.673 回答