2017-05-10 5 views
1

Ich versuche zu zählen und zeigen, wie viele Stimmen jeder Benutzer gab. Wenn ich es in der Python-Konsole mache, zeigt es mir, aber ich kann es nicht aus der Vorlage bekommen.Django kann nicht gezählt werden Stimmen in Vorlage

In Konsole:

from football_app.models import Score 
from football_app.models import CustomUser 

for user in CustomUser.objects.all(): 
    x = Score.objects.filter(granted_to=user).count() 
    print(x) 

0 
1 
1 
1 
1 
1 

0, weil der request.user nicht selbst erlaubt ist, eine Stimme zu geben.

In Ansichten:

def test(request): 
    data = dict() 
    User = get_user_model() 
    for user in User.objects.all(): 
     count_grades = Score.objects.filter(granted_to=user).count() 
     data['count_grades'] = str(count_grades) 
    return render(request, 'test.html', data) 

test.html

{% for number_of_votes in count_grades %} 
    {{ number_of_votes }} 
{% endfor %} 

oder sogar

{{ count_grades }} 

Es zeigt mir nur 1, das ist alles. Warum wird es nicht für jeden Benutzer angezeigt?

+1

Sie haben nur einen Schlüssel in Ihrem Data Dictionary, er wird innerhalb der for-Schleife überschrieben. Ich würde empfehlen, Django Modellaggregate https://docs.djangoproject.com/en/1.11/topics/db/aggregation/#generating-aggregates-for-each-item-in-a-queryset zu betrachten, die gelöst werden sollen Dieses Problem ganz gut, ich kenne Ihr Schema nicht, aber Sie könnten etwas wie haben: 'User.objects.annotate (Count ('scores'))' –

Antwort

1

Sie müssen eine Liste erstellen und Klasse Zählung anhängen

data['count_grades'] = [] 
for user in User.objects.all(): 
    count_grades = Score.objects.filter(granted_to=user).count() 
    data['count_grades'].append(str(count_grades)) 

Doing data['count_grades'] = str(count_grades) angezeigt wird der vorherige Wert überschrieben. Aus diesem Grund wurde der letzte Wert 1 angezeigt.

+0

aha ich verstehe, funktioniert wie ein Charme, bekam noch eine Frage für Sie Wenn Sie bereit sind zu antworten –

+0

Ok .. Was ist die Frage? Ich werde versuchen zu antworten. –

+0

Können Sie einen Raum öffnen, damit wir reden können? –