Django 1.1 unterstützt Aggregationsmethoden wie count. Sie können the full documentation here finden.
Um Ihre Frage zu beantworten, können Sie etwas entlang der Linien von verwenden können:
from django.db.models import Count
q = Player.objects.annotate(Count('games'))
print q[0]
print q[0].games__count
Dies muss leichte Zwicken je nach Ihrem aktuellen Modell.
Bearbeiten: Das obige Snippet generiert Aggregationen auf Objektbasis. Wenn Sie auf ein bestimmtes Feld im Modell Aggregation wollen, können Sie die values
Methode verwenden:
from django.db.models import Count
q = Player.objects.values('playertype').annotate(Count('games')).order_by()
print q[0]
print q[0].games__count
order_by()
benötigt wird, da Felder, die in der Standardreihenfolge sind automatisch auch ausgewählt werden, wenn sie nicht explizit auf values()
weitergegeben. Dieser Aufruf an order_by()
löscht alle Bestellungen und die Abfrage verhält sich wie erwartet.
Auch, wenn Sie das Feld zählen möchten, die für die Gruppierung (äquivalent zu COUNT(*)
) verwendet wird, können Sie:
from django.db.models import Count
q = Player.objects.values('playertype').annotate(Count('playertype')).order_by()
print q[0]
print q[0].playertype__count
Mögliches Duplikat von [Django: wie SELECT COUNT (\ *) GROUP BY und ORDER BY] (http://stackoverflow.com/questions/19101665/django-how-to-do-select-count) -group-by-or-order-by) –