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 の場合はカウントされません)。注釈呼び出しの前に空の文字列を除外できますが、クエリはより複雑で、すべての空オブジェクトと空でないオブジェクトが必要です。
注釈を使用してカウントから空の値をスキップするよりスマートな方法はありますか、またはモデルを変更する必要があります
review = models.CharField(max_length=200, default='', blank=True)
に
review = models.CharField(max_length=200, default=None, blank=True, null=True)