Toll, danke - wenn man weiß wo man suchen muss! "when querysets are evaluated" Ich finde irgendwie nie die entscheidenden Stellen in der Dokumentation! Will nicht jemand von euch mal ein Buch zu Django schreiben? Eines, in dem das alles drinsteht und das ich von vorne bis hinten lesen kann? So eines habe ich zu den Makros in StarOffice gelesen und das hat ungemein geholfen. So habe ich jetzt mehrere Tutorien durchgearbeitet. Da wird dann immer alles am beispiel eines Projektes besprochen, da kann ich nachsehen (wobei ich es hochgradig lästig finde in einem Video etwas suchen zu müssen, anstelle in einem Buch zu blättern) aber das passt dan halt immer nur zum Teil zu meinen Problemen. Es gibt zwei Bücher in englisch, die werde ich mir nach meiner Heimkunft dann mal bestellen. Sie haben zwar keine so guten Rezensionen, es gibt aber anscheinend nichts umfassendes.
Wollt ihr mir solange beim nächsten Problem helfen?
Gelb ist meine Aufgabe, wenn ich sie falsch beantworte, bekomme ich in grün einen entsprechenden Hinweis und wenn ich auf "Abbrechen" klicke komme ich zurück zu meiner Kategorieswahl.a
Jetzt bastele ich an "Lösung anzeigen". Wenn ich darauf klicke, soll die Lösung der letzten Aufgabe in grün auftauchen und in gelb eine neue Aufgabe.
Die Lösung steht in der Datebank "Protokoll". Dort erhält jede Aufgabe einen neuen Eintrag (das ist noch von whitie). Das passiert im view "main". Ich versuche hier ml die entsprechenden Codezeilen einzufügen und die m.E. irrelevanten wegzulassen:
Code: Alles auswählen
def main(req, slug): #hier läuft alles zusammen
kategorie = get_object_or_404(Kategorie, slug = slug)
kategorie_id = kategorie.id
user = get_fake_user()
zaehler = get_object_or_404(Zaehler, kategorie = kategorie, user = user)
if req.method == 'POST':
protokoll = Protokoll.objects.get(pk = req.session.get('eingabe_id'))
protokoll.tries += 1
zaehler = Zaehler.objects.get(pk = req.session.get('zaehler_id'))
frage = get_object_or_404(Frage, pk = protokoll.frage_id)
form = AufgabeFormZahl(req.POST)
right = protokoll.value
if form.is_valid(): #Aufgabe beantwortet
eingabe = form.cleaned_data['eingabe']
...
protokoll.save()
if kontrolle(eingabe, right): #Anwort richtig
protokoll.wertung = "richtig"
protokoll.save()
zaehler.richtig += 1
...
msg = f'richtig: {zaehler.richtig}, falsch: {zaehler.falsch}, Fehlerquote: {quote}%'
messages.info(req, f'Richtig! Versuche: {protokoll.tries}, {msg}')
return redirect('main', slug)
else: #Antwort falsch
protokoll.wertung = "f"
protokoll.save()
zaehler.falsch += 1
...
zaehler.save()
....
msg = f'falsch: {zaehler.richtig}, falsch: {zaehler.falsch}, Fehlerquote: {quote}%'
messages.info(req, f'Leider falsch! Versuche: {protokoll.tries}, {msg}')
text = protokoll.text
...
else: #Aufgabenstellung
frage = Frage.objects.filter(kategorie = kategorie).order_by('?').first()
frage_id = frage.id
form = AufgabeFormZahl()
user = get_fake_user()
if zaehler.optionen_text == "": #Aufgaben Einstellung
return redirect('optionen', slug)
typ, zahl1, zahl2, result = aufgaben(kategorie.id, typ_anf = zaehler.typ_anf, typ_end = zaehler.typ_end, optionen = "")
text = frage.text.format(zahl1 = zahl1, zahl2 = zahl2)
protokoll = Protokoll.objects.create(
user = user, kategorie = kategorie, text = text, value = result, loesung = str(result)
) #Protokoll wird erstellt
req.session['eingabe_id'] = protokoll.id
req.session['zaehler_id'] = zaehler.id
...
protokoll.typ = typ
protokoll.frage_id = frage_id
protokoll.aufgnr = zaehler.aufgnr
...
protokoll.save()
context = dict(kategorie = kategorie, aufgnr = zaehler.aufgnr, text = text, aufgabe = main, form = form, zaehler_id = zaehler.id,)
return render(req, 'core/aufgabe.html', context)
das sind die Links in meiner Aufgaben.html:
Code: Alles auswählen
<nav>
<a href="{% url 'abbrechen' zaehler_id %}">Abbrechen</a>
...
<a href="{% url 'loesung' eingabe_id %}">Lösung anzeigen</a>
</nav>
... der Link zu "abbrechen" funktioniert (ich denke, wegen "req.session['zaehler_id'] = zaehler.id)
Also habe ich versuch auf meine Daten in "Protokoll" mit "url 'loesung' eingabe_id" zuzugreifen (wegen: "req.session['eingabe_id'] = protokoll.id"), das klappt nicht:
Code: Alles auswählen
Reverse for 'loesung' with arguments '('',)' not found.
... oder bin ich da wieder auf einem falschen Weg?