Django 建议不要使用null
on CharField
,但是 annotate 在计数中包含空字符串。有没有办法在不从查询中排除具有空字符串的行的情况下避免这种情况?
我的问题不仅仅是如何实现我的查询,而是从根本上说,注释/聚合计数是否应该包含空字段。Django 认为空作为基于字符串的字段的 NULL 的替代品。
我的模型:
class Book(models.Model):
name = models.CharField(...)
class Review(models.Model):
book = models.ForeignKey()
category = models.ForeignKey()
review = models.CharField(max_length=200, default='', blank=True)
要按类别计算非空评论和分组,我使用
Review.objects.values('category').annotate(count=Count('review'))
这不起作用,因为 annotate 也计算空值(如果条目为 NULL,则不会这样做)。我可以在 annotate 调用之前过滤掉空字符串,但我的查询更复杂,我需要所有空和非空对象。
有没有更聪明的方法来使用注释和跳过计数中的空值,或者我应该从
review = models.CharField(max_length=200, default='', blank=True)
至
review = models.CharField(max_length=200, default=None, blank=True, null=True)