Seite 1 von 1

Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 19:52
von Pitwheazle
Ich habe schon wieder was:
Meine Schüler (die Mädels machen das eher nicht) haben einen Trick rausgefunden, wie sie die Lösung meiner Rechenaufgaben finden ohne selbst zu rechnen. Sie öffnen parallel ein zweites Fenster mit dem Protokoll der Aufgaben, da steht die Lösung drin. Am liebsten würde ich jetzt einfach die neueste Aufgabe nicht anzeigen. Wer hätte es gedacht: Das habe ich noch nicht alleine hinbekommen. Also ich filtere die Aufgaben der Schülerinnen und Schüler mittels:

Code: Alles auswählen

protokoll = Protokoll.objects.filter(user=user_profil).order_by('id').reverse()

ich kann mir auch das erste Element anzeigen lassen - ich möchte aber eben das erste nicht anzeigen.
Geht das? Reicht der Code?

Re: Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 20:11
von Sirius3
Ich würde ja erwarten, dass man das Protokoll einfach nach dem Status filtern kann, also ›neu‹, ›in Bearbeitung‹ und ›abgeschlossen‹, wenn man schon bearbeitet Aufgaben sucht, einfach nur nach den abgeschlossenen filtern, wenn man Aufgaben lösen möchte, nach ›in Bearbeitung‹ filtern.

Re: Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 21:18
von sparrow
Warum steht eine Aufgabe überhaupt in Protokoll bevor sie gelöst ist?

Re: Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 21:19
von Pitwheazle
Wiedermal Danke, ich habe es allerdings schon anders gelöst mit:

Code: Alles auswählen

protokoll[1:]
Das hatte nicht gleich geklappt. ich hatte nach dem Code noch weitere Filter - das klappt nicht. Direkt vor der Übergabe an das Template klappt es aber.

Re: Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 21:23
von sparrow
Klingt nacht einem sehr dreckigen Workaround. Ich würde da eher die Datenfluss in Ordnung bringen.

Re: Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 21:38
von Pitwheazle
Das verstehe ich nicht wirklich. nachdem die Aufgaben des Users gefiltert wurden, können sie noch nach verschiedenen Zeiträumen gefiltert werden. den obengezeigten Code hatte ich vorher eingefügt, jetzt dahinter und das geht einwandfrei.

Re: Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 21:41
von Pitwheazle
sparrow hat geschrieben: Mittwoch 6. Dezember 2023, 21:18 Warum steht eine Aufgabe überhaupt in Protokoll bevor sie gelöst ist?
Das war ja gerade das Problem, das ich lösen wollte. Die Aufgabe wird bei der Erstellung in der Datenbank "Protokoll" gespeichert und dann im "Aufgabenfenster" angezeigt. Jetzt wird die Aufgabe erst angezeigt nachdem sie gelöst wurde.

Re: Queryset ohne erstes Element

Verfasst: Mittwoch 6. Dezember 2023, 22:31
von sparrow
Das würde ich anzweifeln. Wird die Aufgabe jetzt erst angezeigt, wenn sie gelöst ist, oder wenn eine andere gestartet wurde?
Letzteres scheint eher der Fall zu sein?

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 09:13
von Pitwheazle
Danke für den Hinweis! Ein kleiner aber wichtiger Unterschied . Ich werde das ändern und @sirius3 s Vorschlag überdenken.
Sirius3 hat geschrieben: Mittwoch 6. Dezember 2023, 20:11 Ich würde ja erwarten, dass man das Protokoll einfach nach dem Status filtern kann, also ›neu‹, ›in Bearbeitung‹ und ›abgeschlossen‹, wenn man schon bearbeitet Aufgaben sucht, einfach nur nach den abgeschlossenen filtern, wenn man Aufgaben lösen möchte, nach ›in Bearbeitung‹ filtern.
Gibt es den 'status' schon irgendwo fertig oder muss ich das selbst anlegen?

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 10:10
von Sirius3
Ich hatte ja gehofft, dass Du den bereits angelegt hast. Wie hast Du denn bisher herausgefunden, ob eine Aufgabe schon Fertig gelöst ist, oder noch in Bearbeitung ist?

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 16:47
von Pitwheazle
Ich habe das, wie immer, so hingebastelt, wie es mir eingefallen ist: Wenn eine Aufgabe erstellt wird, werden die Werte dazu in einem Eintrag im "Protokoll" gespeichert und die Aufgabe an das template geschickt. Das Feld "Eingabe" ist so lange leer. Was der User in das Eingabefenster eingibt wird wieder zum View geschickt und mit den Werten im "Protokoll"eintrag verglichen. Ist die Aufgabe richtig gelöst, wird eine neue Aufgabe mit neuer Protokollinstanz erzeugt, ist sie nicht richtig, wird die Aufgabe mit entsprechendem Kommentar an das template zurückgeschickt.
Ich hatte jetzt den Filter so ergänzt, dass nur die Protokolleinträge angezeigt werden, bei denen die Eingabe leer ist - jetzt wo ich das aufschreibe fällt mir auf, dass das dann nicht der Fall ist, wenn eine falsche Eingabe drin steht. Da muss ich nochmals hirnen. Legt man ansonsten ein Feld "staus" an?

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 17:19
von Pitwheazle
Eine halbe Stunde intensiver Überlegung später:
Mir ist nichts rechtes eingefallen. Wie stelle ich sicher, dass nur die Aufgaben im Protokoll angezeigt werden, die nicht mehr vom User bearbeitet werden können? Gibt es da (für mich) geheime Optionen in Django? Oder habe ich am Ende mein ganzes Projekt falsch aufgezogen? Ich könnte alle Möglichkeiten überprüfen, die dazu führen, dass eine neue Aufgabe erstellt wird und ein entsprechenden Eintrag in meinem Protokoll machen - die SuS bekommen aber auch eine neue Aufgabe, wenn sie auf F5 klicken, ohne dass ich das im Protokoll speichern kann. Besser gesagt, speichere ich das schon ab, da ich einen entsprechenden Eintrag im Feld "Wertung" vornehme, den ich erst lösche, wenn die Aufgabe auf normalem Wege beendet wird (mit richtiger Lösung, drei Falscheingaben oder Klick auf "Lösung anzeigen" oder "Abbrechen") - hilft mir das weiter?

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 17:59
von __deets__
Ich habe das jetzt nicht alles vor Augen, was du da gemacht hast. Aber die Hinweise hier beziehen sich auf die Notwendigkeit, dein Protokoll so zu erweitern, dass es einen Status hat - ist die Aufgabe geloest (oder um Hilfe gebeten) worden? Und in einer Listenansich filterst du eben genau danach. Nur geloeste Aufgaben tauchen auf. Dieser Status wird eben beim loesen einer Aufgabe gesetzt.

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 18:03
von Pitwheazle
OK, das leuchtet mir ein. Dann werden aber die Aufgaben, die neu erstellt wurden indem der User auf F5 klickt nicht aufgeführt, da kann ich ja den Status nicht mehr ändern. Oder sehe ich das falsch? Es interessiert mich aber, welche Aufgaben vom User "weggeklickt" werden.

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 18:09
von __deets__
Na dann sind die eben weg, er hat doch neue Aufgaben angefordert, und die Loesung eben nicht erfragt. Das sind dann halt Karteileichen, die irgendwann mal abgeraeumt werden koennen. Wenn dein System zB vorsieht, dass man immer nur genau eine Aufgabe gerade loesen kann, dann kannst du beim umsetzen des Status der gerade geloesten (oder nicht-geloesten, aber die Hilfe soll gezeigt werden) Aufgabe alle *anderen*, die im Status ungeloest sind im Protokoll rumlungern, abraeumen. Oder durch einen regelmaessigen Job alle, die aelter als X sind.

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 18:28
von Pitwheazle
Nun ja, ich finde es (oder fand es zu meiner aktiven Zeit) wichtig zu sehen, welche Aufgaben von SuS weggeklickt wurden. Ich habe mir jetzt so geholfen, dass die aktuelle Aufgaben nur angezeigt wird, wenn schon eine Eingabe erfolgt ist. Die Kids wollen ja keine Fehler gezählt bekommen und wahrscheinlich nicht zunächst ein falsche Eingabe machen, nur um das Ergebnis angezeigt zu bekommen. Das die Aufgabe angezeigt wird, wenn auf "Hilfe anzeigen" geklickt wurde (das wird auch in "Eingabe" gespeichert), habe ich auch verhindert.

Re: Queryset ohne erstes Element

Verfasst: Donnerstag 7. Dezember 2023, 19:43
von __deets__
Das DU das sehen kannst/willst ist davon ja unbenommen. Dann lösch eben nicht. Aber ändert ansonsten nichts am Vorgehen.

Re: Queryset ohne erstes Element

Verfasst: Freitag 8. Dezember 2023, 08:40
von Kebap
Du könntest die "weggeklickten" Fragen ja durchaus auch im Protokoll auflisten - nur eben ohne ihre Lösung.

Um die Fälle zu unterscheiden, brauchst du aber einen Status an der Frage: Ist sie schon gelöst worden?

Der Umweg über "Ist eine Eingabe vorhanden?" geht eigentlich in die richtige Richtung, aber nicht weit genug.