Listen in JSON Field speichern
Verfasst: Donnerstag 25. Juli 2024, 17:10
Ich schon wieder!
Bei meinem Rechenduell will ich die Eingaben speichern. Immer wenn eine neue Aufgabe erstellt wird, wird ein Eintrag im "Duell_Protokoll" erzeugt. In diesem wird die Lerngruppe und die beiden Duellanten gespeichertr und jetzt will ich auch noch die Eingaben und Wertungen speichern. Zunächst wollte ich das einfach in einem Charfield erledigen, zwischenzeitlich fände ich es sinnvoller, bei jeder Eingabe eine Liste (oder Tuple) zu speichern. Dazu ist mir nichts besseres eingefallen als ein JSON Field:
Bei der Erstellung der Aufgabe wird ein entsprechender Eintrag im Duell_Protokoll erzeugt:
und bei jeder Eingabe will ich dann eine Liste mit Name, Eingabe und Bewertung speichern.
Das funktioniert noch nicht so ganz wie ich will:
1. Wird hier, wenn eine zweite Eingabe erfolgt (weil die erste falsch war) eine neue Liste angehängt sondern die bestehende Liste verlängert.
2. Muss ich bei der Aufgabenerstellung schon eine leere Liste in "Wertung" eintragen, sonst erfolgt ein Fehler wenn ich die (eigentlich) erste Liste einfügen will.
3. Will JSON auch keine Decimal akkzeptieren, ich muss die Werte zunächst in Strings umwandeln.
Vielleicht ist meine Rangehensweise ja aber überhaupt nicht sinnvoll?
Bei meinem Rechenduell will ich die Eingaben speichern. Immer wenn eine neue Aufgabe erstellt wird, wird ein Eintrag im "Duell_Protokoll" erzeugt. In diesem wird die Lerngruppe und die beiden Duellanten gespeichertr und jetzt will ich auch noch die Eingaben und Wertungen speichern. Zunächst wollte ich das einfach in einem Charfield erledigen, zwischenzeitlich fände ich es sinnvoller, bei jeder Eingabe eine Liste (oder Tuple) zu speichern. Dazu ist mir nichts besseres eingefallen als ein JSON Field:
Code: Alles auswählen
class Duell_Protokoll(models.Model):
protokoll = models.ForeignKey(Protokoll, related_name='duellprotokoll', on_delete=models.CASCADE)
gruppe = models.ForeignKey(Lerngruppe, related_name='duellgruppe', on_delete=models.CASCADE)
duellant_1 = models.ForeignKey(Duellant, related_name='duellant_1', on_delete=models.CASCADE)
duellant_2 = models.ForeignKey(Duellant, related_name='duellant_2', on_delete=models.CASCADE)
wertung = models.JSONField()
Code: Alles auswählen
duell_protokoll = Duell_Protokoll.objects.get_or_create(
protokoll = protokoll, gruppe = gruppe, duellant_1 = duellant_1, duellant_2 = duellant_2, wertung =[]
)
Code: Alles auswählen
duell_protokoll.wertung += [duellant.name, str(eingabe), str(duellant.punkte_spiel)]
1. Wird hier, wenn eine zweite Eingabe erfolgt (weil die erste falsch war) eine neue Liste angehängt sondern die bestehende Liste verlängert.
2. Muss ich bei der Aufgabenerstellung schon eine leere Liste in "Wertung" eintragen, sonst erfolgt ein Fehler wenn ich die (eigentlich) erste Liste einfügen will.
3. Will JSON auch keine Decimal akkzeptieren, ich muss die Werte zunächst in Strings umwandeln.
Vielleicht ist meine Rangehensweise ja aber überhaupt nicht sinnvoll?