Lieber Whitie, ich bekomme das nicht alleine hin - wahrscheinlich, weil ich das ganze Prinzip noch nicht verstanden habe.
Ich versuche hier nochmal die Bausteine einzustellen und zu beschreiben was ich verstanden habe und was nicht:
Wenn der user eine Kategorie anklickt,, ist das Feld "zaehle.optionen" leer. Es wird überprüft, ob für die Kategorie, für die Stufe und den Jahrgang Optionen da sind. Falls nicht wird in "zaehler.optionen" "keine" eingetragen, ansonsten wird eine HTML Abfrage angezeigt, z.B. "mit Kommazahlen" (es werden später in anderen Kategorien aber auch noch andere Optionen dazukommen).
Wenn Optionen vorhanden sind, wird die Funktion für die entsprechenden Kategorie (z.B. "addieren") aufgerufen und festgelegt von welchem Typ Aufgaben erstellt werden ("typ_anf" bis "typ_end") und diese in den entsprechenden Feldern von "zaehler" eingetragen. Bei der zweiten und jeder weiteren Aufgabe werden dann die Aufgaben aus diesem Bereich erstellt.
Nach der zehnten Aufgabe, oder wenn "abbrechen" angeklickt wird, wird in "zaehler" das Felder "optionen", gelöscht (und der Aufgebenzähler auf Null gesetzt). Beim nächsten Start einer Kategorie erfolgt dann wieder u.U. die Abfrage der Optionen. Soweit funktioniert das.
Code: Alles auswählen
def main(req, slug):
modul = get_object_or_404(Kategorie, slug = slug)
user = get_fake_user()
zaehler = get_object_or_404(Zaehler, kategorie = modul, user = user)
if req.method == 'POST':
...
else:
...
if zaehler.optionen == "":
return redirect('optionen', slug)
...
def optionen(req, slug):
kategorie = get_object_or_404(Kategorie, slug = slug)
form = AuswahlForm(kategorie = kategorie)
user = get_fake_user()
zaehler = get_object_or_404(Zaehler, kategorie = kategorie, user = user)
if req.method == 'POST':
form = AuswahlForm(req.POST, kategorie = kategorie)
if form.is_valid():
zaehler.optionen.set(form.cleaned_data['optionen'])
optionen_text = ';'.join(map(str, form.cleaned_data['optionen']))
if optionen_text == "":
optionen_text = "keine"
else:
optionen_text = "keine"
else:
anzahl = kategorie.auswahl_set.all().count()
if anzahl>0:
anzahl = Auswahl.objects.filter(bis_jg__gte = user.jg, bis_stufe__gt = user.stufe,kategorie = kategorie).count()
return render(req, 'core/optionen.html', {'kategorie': kategorie, 'auswahl_form':form})
else:
optionen_text = "keine"
zaehler.optionen_text = optionen_text
zaehler.save()
typ_anf, typ_end = aufgaben(kategorie.id, jg = user.jg, stufe = user.stufe, optionen = zaehler.optionen_text)
zaehler.typ_anf = typ_anf
zaehler.typ_end = typ_end
zaehler.save()
return redirect('main', slug)
Gelöst habe ich das mit deinem Code:
Code: Alles auswählen
optionen_text = ';'.join(map(str, form.cleaned_data['optionen']))
... der einfach den Text "mit Kommazahlen" speichert, oder auch nicht, jenachdem, ob es angeklickt wurde.
Vorher hattest du mir den Code
empfohlen, von dem ich nicht weiß, was er macht. Wenn ich unter admin nachschaue, steht zweimal "mit Kommazahlen" in "zaehler":
... ich hatte geadcht, der Code verknüpft die gewählten Optionen im Feld "zaehler.optionen" - da tauchen aber zwei Einträge auf - warum? Und die stehen da drin, egal, ob angewählt oder nicht. (Das Problem hatte ich schon mal beschrieben).
Und diese Verknüpfung (ist es den eine?) müsste ich doch jetzt nach 10 Aufgaben löschen mit:
?
Aber was trage ich da unter <AUSWAHL ZUM ENTFERNEN> ein? Meines Erachtens müssten doch alle Verknüfungen gelöscht werden.
Du siehst, ich habe es immer noch nicht kapiert und ich habe mich mit dem Link zum Mannual beschäftigt, das kapiere ich aber nicht
Und das nächste Problem: Nach 10 Aufgaben will ich, wenn die Option gewählt wurde, nachprüfen, welcher Eintrag unter "bis_stufe" und "bis_jg" steht:
Code: Alles auswählen
class Auswahl(models.Model):
kategorie = models.ForeignKey(Kategorie, null=True, on_delete=models.CASCADE)
text = models.CharField(max_length=80, verbose_name="Text")
bis_stufe = models.IntegerField(default=0, verbose_name="bis Stufe (ex):")
bis_jg = models.IntegerField(default=0, verbose_name="bis Jahrgang:")