Queryset ohne erstes Element

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Warum steht eine Aufgabe überhaupt in Protokoll bevor sie gelöst ist?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Klingt nacht einem sehr dreckigen Workaround. Ich würde da eher die Datenfluss in Ordnung bringen.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

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?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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?
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das DU das sehen kannst/willst ist davon ja unbenommen. Dann lösch eben nicht. Aber ändert ansonsten nichts am Vorgehen.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

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.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Antworten