2016-05-12 48 views
5

Django uygulamamda, üzerinde istatistik yapmak istediğim bir dizi bağış var. Her bağış için bir kişi e-posta adresiyle bağlantılıdır.Django queryset group by ve say sayıları

Her ay için, benzersiz e-posta eklentisi sayısı olan bağışların sayısını hesaplamak istiyorum.

Şimdiye kadar var: Bu iyi çalışıyor

# filter all donations by month 
truncate_date = connection.ops.date_trunc_sql('month', 'date') 
qs = Donation.objects.extra({'month': truncate_date}) 

# group by months and annotate each with the count of emails 
donors = qs.values('month').annotate(count=Count('email')).order_by('month') 

, ben tüm e-posta bağışçıların aylık rapor alırım ama e-postada çoğaltmak var gibi benzersiz değerleriyle e filtre uygulamaz.

Kullanılan veritabanı Postgresql'dir.

Bu nasıl yapılabilir?

+0

Eğer postgres kullanıyor musunuz? – Sayse

+0

Evet, bunu soruya ekleyeceğim. – nobe4

cevap

5

Count bir distinct argument sürdüğünden ödemeyi yapabilirsiniz:

donors = qs.values('month').annotate(count=Count('email', distinct=True)).order_by('month')