So, heute geht´s mal wieder weiter (Ich habe ja gedacht, das könne nicht sein, aber Rentner haben wirklich keine Zeit
)
Whitie hat geschrieben: ↑Sonntag 19. Juni 2022, 05:38
Du könntest ein Wörterbuch (dict) mit den Werten zurückgeben.
Das mit dem dict habe ich auch schon bedacht. Aber hilft mir das weiter? Mein Funktionsaufruf
Code: Alles auswählen
typ, text, pro_text, lsg, hilfe, result = aufgaben(kategorie.id, j....)
erwartet doch trotzdem (zurzeit noch) 6 Rückgabewerte und die Funktionen müssen die doch auch zurückgeben. Das ändert sich doch nicht wenn ich ein dict zurückgebe - oder doch?
Sirius3 hat geschrieben: ↑Sonntag 19. Juni 2022, 06:44
... Das heißt, am besten definierst du dir für jeden Aufgabentyp eine eigene Klasse.
... auweh, um die Klassen drücke ich mich ja schon lange rum. Aber ich denke, früher oder später muss ich da auch dran. Lass mir noch etwas Zeit bis ich zu den Grafiken komme.
Jetzt habe ich wieder was neues, mit dem mein armes Hirn überfordert ist:
Klicken auf "Lösung anzeigen" zeigt die Lösung der aktuellen Aufgabe und zeigt gleichzeitig eine neue Aufgabe an:
Klicken auf "Hilfe anzeigen" zeigt, wie gewünscht, eine Hilfe an und ebenfalls eine neue Aufgabe. Ich will aber keine neue Aufgabe.
Zum Vergleich: Wenn der User die Aufgabe richtig gelöst hat, bekommt er eine neue Aufgabe, falls die Eingabe nicht richtig war, bekommt er noch zwei weitere Chancen. Das alles läuft in der Funktion "main" zusammen. (Die Grundstruktur ist immer noch die von Whitie.) Ich kürze die hier mal etwas:
Code: Alles auswählen
def main(req, slug, protokoll_id=0): #hier läuft alles zusammen
kategorie = get_object_or_404(Kategorie, slug = slug)
kategorie_id = kategorie.id
user = get_fake_user()
if req.method == 'POST':
protokoll = Protokoll.objects.get(pk = req.session.get('eingabe_id'))
...
zaehler = Zaehler.objects.get(pk = req.session.get('zaehler_id'))
...
if form.is_valid(): #Aufgabe beantwortet
eingabe = form.cleaned_data['eingabe']
...
if kontrolle(eingabe, right): #Anwort richtig
....
return redirect('main', slug)
else: #Antwort falsch
...
else: #Aufgabenstellung
zaehler, created = Zaehler.objects.get_or_create(user = user, kategorie = kategorie)
form = AufgabeFormZahl()
user = get_fake_user()
...
typ, text, pro_text, lsg, hilfe, result = aufgaben(kategorie.id, jg = user.jg, stufe = user.stufe, typ_anf = zaehler.typ_anf, typ_end = zaehler.typ_end, optionen = "")
protokoll = Protokoll.objects.create(
user = user, kategorie = kategorie, text = pro_text, value = result, loesung = lsg, hilfe = hilfe
) #Protokoll wird erstellt
req.session['eingabe_id'] = protokoll.id
req.session['zaehler_id'] = zaehler.id
---
context = dict(kategorie = kategorie, typ = typ, aufgnr = zaehler.aufgnr, text = text, form = form, zaehler_id = zaehler.id, hilfe = protokoll.hilfe,)
return render(req, 'core/aufgabe.html', context)
Wenn die Aufgabe falsch beantwortet wurde, geht es im Code mit
Code: Alles auswählen
context = dict(kategorie = kategorie, typ = typ, aufgnr = zaehler.aufgnr, text = text, form = form, zaehler_id = zaehler.id, hilfe = protokoll.hilfe,)
return render(req, 'core/aufgabe.html', context)
weiter. Klicken auf "Hilfe anzeigen" führt zur Funktion
Code: Alles auswählen
def hilfe(req, zaehler_id):
zaehler = get_object_or_404(Zaehler, pk = zaehler_id)
zaehler.hilfe +=1
protokoll = Protokoll.objects.filter(user = zaehler.user).order_by('-id').first()
msg=f'{protokoll.hilfe}'
...
zaehler.hinweis = msg
zaehler.save()
return redirect('main', zaehler.kategorie)
Ich dachte mir jetzt, wenn ich mittels
Code: Alles auswählen
return redirect('main', zaehler.kategorie, protokoll.id)
den entsprechenden Eintrag in "Protokoll" übergebe (da stehen die gewünschten Werte drin) und dann
durch
ersetze, sollte das doch klappen. Ich bekomme es aber nicht hin.
Mir fällt dann schon nicht ein, wie ich den Aufruf von "main"
entsprechend anpasse.
...
Könnt ihr mir mittels dieser Angaben und Codeteile weiterhelfen?