【发布时间】:2021-06-11 04:35:18
【问题描述】:
我有一个 Django 数据库模型,它有一些属性,其中之一是带有选项的 Charfield“类别”。 我现在想用每个类别的行数来注释这个模型的查询集。问题是,我知道这样做的方式,只有查询集中存在的类别被计算在内,但我想要一个查询集,其中所有类别都用计数注释(如果没有此类别的行,则为 0)。
这就是我现在正在做的事情:
Model.objects.all().values('category').annotate(total=Count('category'))
有没有办法显示所有类别,包括计数为 0 的类别?
【问题讨论】:
-
那么您将如何计算不存在的
Categorys? -
如果选择是固定的,并且您不觉得需要创建另一个模型,请在类似问题上查看我的 answer。
-
@AbdulAzizBarkat:我的一位教授曾经说过:“编程中只有三个有意义的常数:零、一和多”。他的意思是,通常将事物设置为固定的基数最终会导致很多麻烦:)。它通常还会产生额外的问题,例如 数据重复,因为现在我们在每条记录中重复相同的类别。如果我们以后想重命名该类别,可能会让人很头疼。
-
@WillemVanOnsem 有很好的建议。 :) 从来没有这样想过。由于我曾经遇到过类似的问题,上述答案中的方法实际上也是由我创建的,现在我回头看这是我的糟糕设计。
-
@AbdulAzizBarkat:好吧+1 :)