django计数注释字段

时间:2014-04-06 19:49:13

标签: python django django-1.3 django-aggregation

Django 1.3,Python 2.7

我有以下模型(省略了一些不相关的字段):

class Encounter(models.Model):
  subject = models.ForeignKey('Subject', to_field='uuid')
  uuid = models.SlugField(max_length=36, unique=True, default=make_uuid, editable=False)

class Subject(models.Model):
  uuid = models.SlugField(max_length=36, unique=True, default=make_uuid, editable=False)

我使用以下代码计算了每个主题的遭遇次数:

e_in_s = Subject.objects.annotate(revcount = Count('encounter')).order_by('-revcount')

现在,我想知道有多少主题对revcount的每个值都有revcount次遇到的问题。我尝试了以下方法:

sprime_in_e = e_in_s.values('revcount').annotate(countprime=Count('revcount'))

但得到错误"无法计算计数(' revcount'):' revcount'是一个聚合"。有什么建议吗?

注意:我需要e_in_s生成的值及其注释。

1 个答案:

答案 0 :(得分:2)

您不能使用带注释值的注释。但是,您可以使用aggregateSee the docs.

您的查询将如下所示:

e_in_s = Subject.objects.annotate(revcount = Count('encounter')).order_by('-revcount')
sprime_in_e = e_in_s.values('revcount').aggregate(countprime=Count('revcount'))

如果这还不够,您需要使用extra功能或下拉到原始SQL。