2016-05-12 21 views
5

W mojej aplikacji django mam zestaw darowizn, na których chcę tworzyć statystyki. W przypadku każdej darowizny osoba jest powiązana ze swoim adresem e-mail.Grupa zapytań Django według i liczyć różne

Chcę obliczyć dla każdego miesiąca liczbę dawców, czyli liczbę unikalnych dodatków do wiadomości e-mail.

Do tej pory mam:

# 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') 

Działa to dobrze, mam miesięczny raport wszystkich dawców mail, ale jak mam powielać w wiadomości e-mail, to nie filtruje wiadomości e-mail przez unikalnych wartości.

Bieżąca używana baza danych to Postgresql.

Jak to zrobić?

+0

Używasz postgres? – Sayse

+0

Tak, dodam to w pytaniu. – nobe4

Odpowiedz

5

Count trwa distinct argument, więc można zrobić:

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