Django查询Count总是返回0

时间:2012-10-08 23:19:08

标签: django django-queryset

这是我的模特:

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,我的代码有什么问题,还是有其他方法来计算表中的空字段?

1 个答案:

答案 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。