2012-10-10 7 views
5

Aşağıdaki model var düşünün:Django modelinde olaylar veya sayım örneklerini aldınız mı?

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

Nasıl boş isimleri görmezden ben, onların sayıları, oluşma azalan sırada, en popüler isimlerinden dizisi döndürür bir istek yazma konusunda gitmek?

13 Leslies, 8 Andys, 3 Aprils, 1 Ron ve adı belirtilmemiş olan 18 kişilik bir veritabanı için

yani çıkış olacaktır:

[('Leslie', 13), ('andy', 8), ('Nisan', 3), ('ron', 1)]

alabilirim en yakın aşağıdakileri yaparak geçerli:

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

Ama oldukça hareketsiz değil istediğim.

cevap

10

bazı kazma sonra nihayet öğrendim:

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

Ayrıca ' – okm

+0

nasıl bu sorgu için bazı filtreler uygulamak için' .exclude (optional_first_name = '') isteyebilirsiniz? sadece 'A' ile başlayan filtreler gibi –

İlgili konular