2016-06-07 3 views
0

나는 이것이 아마 정말 간단한 질문 알지만, 지금은 연령대를 해결하고 실패 유지하기 위해 노력했습니다!장고 집계/주석

class Subject(models.Model): 
    name = models.CharField(max_length=200) 

class Pupil(models.Model): 
    first_name = models.CharField(max_length=200) 
    last_name = models.CharField(max_length=200) 
    active = models.BooleanField(default=0, db_index=True) 
    takes_subject = models.ManyToManyField(Subject) 

각 학생은 많은 과목을 수행 할 수 있습니다

나는 두 가지 모델이있다. 많은 학생들이 각 과목은 쉽게 을하지만 여러 과목을 얼마나 많은 학생들 발견 할 방법을 찾기.

Subjects taken | Number of pupils 
===============|================== 
4    | 20 
3    | 15 
2    | 7 
1    | 38 

(38) 학생은 한 주제를 복용하는 동안 15 명 학생들은 3 개 과목을 복용하는 말을 내가 알 수있는 그 방법 : 비슷해.

어떻게해야합니까? 사전에

감사합니다, 예를 들어, 각 학생이 소요 얼마나 많은 과목을, 계산 Pupil에서 목록을 가져옵니다

알렉스

답변

1
from collections import Counter 
Counter(Pupil.objects.annotate(
    count=Count('takes_subject')).values_list('count', flat=True)) 

[4, 5, 4, 4, 6,...].

그런 다음 각 숫자가 발생하는 빈도 Counter() 수를하게하고, 예를 들어, dict()을 반환 {4: 3, 5: 1, 6: 1, ...}.