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?
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'))' –