Meine Übersicht sieht jetzt so aus:

Die Einträge "True" und "False" kommen von meiner Summe über "Abbrechen", "Lösung anzeigen" und "Hilfe anzeigen". "False" wird angezeigt, wenn kein Eintrag gefunden wird, "True" bei einem und ansonsten die Summe. Gibt es eine einfache Möglichkeit, "0" und "1" anzuzeigen oder muss ich das immer mit "if" und "elseif" abfangen?
Code: Alles auswählen
abbr_gesamt = protokoll.aggregate(Sum('abbr'))['abbr__sum']
lsg_gesamt = protokoll.aggregate(Sum('lsg'))['lsg__sum']
hilfe_gesamt = protokoll.aggregate(Sum('hilfe'))['hilfe__sum']
@sparrow: Du hast mir das mal so zusammengebastelt (und das tut auch an der Stelle, wofür du es geschrieben hast.I
Ich habe auch den Link zu den f-expressions geöffnet und versucht zu verstehen - hier klappt es aber nicht:sparrow hat geschrieben: ↑Sonntag 19. Februar 2023, 21:18 Das Gruppieren und Annotieren kann die Datenbank übernehmen. Und wir verwenden eine F-Expression um die Zeit auszurechnen:
Code: Alles auswählen
from django.db.models import F, Sum protkoll_statistics = ( Protokoll.objects .values("user__name", "kategorie__name") .annotate(richtig_sum=Sum('richtig')) .annotate(falsch_sum=Sum('falsch')) .annotate(zeit_sum=Sum(F('end') - F('start'))) .order_by() )
Code: Alles auswählen
protokoll = Protokoll.objects.filter(user=user, sj=user.sj, hj=user.hj)
zeit_gesamt = protokoll.aggregate(Sum(F('end') - F('start')))
Code: Alles auswählen
Complex aggregates require an alias