2012-10-10 2 views
5

나는 다음과 같은 모델을 가지고 상상 :Django 모델 목록에서 + count를 얻으시겠습니까?

class Person(models.Model): 
    ...other stuff... 
    optional_first_name= models.CharField(max_length=50, blank=True) 

어떻게 빈 이름을 무시하고 내가 그들의 건의, 선두로부터의 내림차순으로, 가장 인기있는 이름의 배열을 반환 요청을 작성 가겠어요?

13 Leslies, 8 Andys, 3 Aprils, 1 론과 이름을 지정하지 않은 18명와 데이터베이스에 대한

즉, 출력은 다음과 같습니다

[('레슬리', 13), ('앤디', 8), ('에이프릴', 3), ('론', 1)]

내가 얻을 수있는 가장 가까운 다음을 수행하는 것입니다 :

q= Person.objects.all() 
q.query.group_by=['optional_first_name'] 
q.query.add_count_column() 
q.values_list('optional_first_name', flat= True) 

을하지만 꽤 아직 아니다 내가 원하는거야.

답변

10

는 뒷조사 후, 마침내 발견 :

Person.objects.values('optional_first_name').annotate(c=Count('optional_first_name')).order_by('-c') 
+2

당신은 또한' – okm

+0

방법이 쿼리에 몇 가지 필터를 적용하는'.exclude (optional_first_name = '') 할 수 있습니다? like 필터는 'A' –