Bei einigen der Aufgaben können die Schüler, je nach Jahrgang ("jg") oder Lernfortschritt ("stufe"), verschiedene Optionen wählen. Bei meinen aktuellen Aufgaben zur Prozentrechnung sieht das z.B. so aus:
Ob diese Optionen zur Auswahl angezeigt werden, stelle ich hier ein:
Das funktioniert auch bedingt: sobald die Kids im Jahrgang 9 sind oder die Stufe 28 erreicht haben, werden diese Optionen nicht mehr angezeigt, vorher schon - und zwar alle. Ich möchte erreichen, dass z.B. ab Stufe 18 die erste Option ("Berechnug des Prozentwertes") nicht mehr angezeigt wird, da die Kids ab dieser Stufe den sowieso ausrechnen müssen und dass ab Jahrgang 8 nur noch die letzte Option ("mit Zinsrechnung") angezeigt wird, den Rest müssen sie sowieso rechnen. Zurzeit werden aber entweder alle vier angezeigt oder das entsprechende Template wird gar nicht aufgerufen.
Das template "optionen":
Code: Alles auswählen
<h2>{{ kategorie.name }}</h2>
<ul>
<form action="{% url 'optionen' kategorie.slug %}" method="Post">
{% csrf_token %}
{{auswahl_form}}
<input type="submit" value="weiter">
</form>
</ul>
Code: Alles auswählen
class AuswahlForm(forms.Form):
optionen=forms.ModelMultipleChoiceField(queryset=Kategorie.objects, widget=forms.CheckboxSelectMultiple, required=False)
def __init__(self, *args, **kwargs):
kategorie = kwargs.pop('kategorie')
super().__init__(*args, **kwargs)
self.fields['optionen'].queryset = kategorie.auswahl_set.all()
Code: Alles auswählen
#Hier können u.U. Optionen gewählt werden - z:B. ob mit oder ohen Kommazahlen gerechnet wird
def optionen(req, slug):
kategorie = get_object_or_404(Kategorie, slug = slug)
form = AuswahlForm(kategorie = kategorie)
user = get_user(req.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():
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__gte = user.stufe, kategorie = kategorie).count()
if anzahl>0:
return render(req, 'core/optionen.html', {'kategorie': kategorie, 'auswahl_form':form})
else:
optionen_text = "keine"
else:
optionen_text = "keine"
zaehler.optionen_text = optionen_text
zaehler.save()
typ_anf, typ_end = aufgaben(kategorie.zeile, 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)
Wenn ich das richtig sehe, überprüft der Code:
Code: Alles auswählen
anzahl = Auswahl.objects.filter(bis_jg__gte = user.jg, bis_stufe__gte = user.stufe, kategorie = kategorie).count()
if anzahl>0:
return render(req, 'core/optionen.html', {'kategorie': kategorie, 'auswahl_form':form})