如何使用Django检索模型字段的值分布?

时间:2015-03-24 22:00:47

标签: python django django-queryset

我有一个这样的模型:

class Question(models.Model):
  #something

class Answer(models.Model):
  question = models.ForeignKey(Question)      
  points_achieved = models.PositiveSmallIntegerField()

现在我想查询points_achieved的分布:对于每个问题,我想知道有多少得分0分,1分等。 在python中我会这样做:

dists = []
  for q in Question.objects.all():
    dist = defaultdict(int)
    for answer in q.answer_set.all():
      dist[answer.points_achieved]+=1
    dists.append(dist)

如何使用Django的查询方法完成相同的操作?

2 个答案:

答案 0 :(得分:3)

试试这个

from django.db.models import Count
Answer.objects.all().values('question', 'points_achieved').annotate(total=Count('points_achieved')).order_by('total')

来源:Django Aggregation

答案 1 :(得分:0)

经过一些更疯狂的猜测和以下this教程后,我设法提出了这个解决方案:

Answer.objects.values('question','points_achieved')
  .annotate(Count('points_achieved'))