2009-08-02 11 views
12

So habe ich zwei Modelle, ein Ranking-Modell und ein UserRanking-Modell. Die App konzentriert sich auf Personen, die eine Liste von Gegenständen nehmen und sie in eine Rangfolge bringen (z. B .: "Beste Filme von 2008"). Das Ranking-Modell ist die gesamte aggregierte Rangliste, die aus allen verschiedenen UserRankings berechnet wird, die Personen für diese Liste erstellen. Für jedes Ranking gibt es also eine Reihe verschiedener UserRankings, genau eine für jeden Benutzer, der seine Meinung abgegeben hat, indem er seine Rangliste der Liste eingereicht hat. Das UserRanking-Modell hat ein ForeignKey-Feld namens "ranking", das auf das Ranking-Modell hinweist.Sehr verwirrt ... Problem mit 'Annotate' in Django

Wie auch immer, ich versuche, die beliebten Rankings zu sammeln. Mein erster Schritt ist es, die Rankings mit den meisten UserRankings sie mit dieser Codezeile verbunden zu bekommen:

popular = Ranking.objects.all().annotate(num_user_rankings=Count('userranking')).order_by('num_user_rankings')[:50] 

jedoch Django gibt mir einen Nameerror und sagt: „globale Namen‚Count‘ist nicht definiert“. Es beschwert sich nicht über Annotate (was nur in der Django Development Version verfügbar ist), also bedeutet das, dass die Django Entwicklung richtig funktioniert? 'Count' wird in den Django-Dokumenten eindeutig als eine von mehreren Aggregatfunktionen beschrieben, die als Argument für Annotate verwendet werden können. Das macht absolut keinen Sinn.

In der Tat habe ich es gerade getestet, und ich war in der Lage, meine Seite mit Annotate ohne Parameter anzuzeigen, und es gab mir keine Fehler (offensichtlich entfernte ich auch die order_by). Annotate funktioniert also sicher!

Antwort

32

Haben Sie Count von django.db.models importiert?

+3

Ich kann nicht glauben, dass die Antwort so einfach war. Ich wusste, dass ich etwas Dummes tat, aber einfach nicht so dumm! Danke, einen schönen Tag =) –

Verwandte Themen