zwei forms in einem Template
Verfasst: Freitag 24. Februar 2023, 15:34
Ich komme wieder nicht weiter. Ich habe mich am Thema "formsets" in der Django Dokumentation versucht und Antworten auf ähnliche Fragen in stackoverflow versucht zu verstehen - beides übersteigt meine kognitiven Fähigkeiten.
Also ich soll den Lehrkräften die Möglichkeit geben, zu überprüfen wie viele Aufgaben ihre Schülerinnen und Schüler in der letzten Woche gemacht haben. Da manchmal die Überprüfung erst ein oder zwei Tage später erfolgt, soll das etwa so aussehen:

Ausschnitt aus dem Template dazu:
auf den Filter kann ich zugreifen. Beim Datum weiß ich nicht so recht wie.
forms.py:
und Ausschnitt aus views.py:
"tag = tag_wahl(req.Post)" führt zum Fehler "'WSGIRequest' object has no attribute 'Post'" (Ich hatte auch nicht wirklich erwartet, dass das einfach so funktioniert).
Ich habe es auch mit einem formset probiert:
da werden mir sogar die beiden forms angezeigt (da hätte ich gar nicht mit gerechnet)
aber da stimmt was mit dem csrf_token nicht und weitergekommen bin ich da auch nicht.
Also ich soll den Lehrkräften die Möglichkeit geben, zu überprüfen wie viele Aufgaben ihre Schülerinnen und Schüler in der letzten Woche gemacht haben. Da manchmal die Überprüfung erst ein oder zwei Tage später erfolgt, soll das etwa so aussehen:

Ausschnitt aus dem Template dazu:
Code: Alles auswählen
<form action="{% url 'gruppe_uebersicht' gruppe_id %}" method="POST">
{% csrf_token %}
<h2 style= "text-align: left;">Entweder hier einen Fiter:
{{form_filter}}
<input name="filter" type="submit" value="anwenden">
... oder Aufgaben seit:
{{tag_wahl}}
<input name="datum" type="submit" value="wählen">
</h2>
</form>
forms.py:
Code: Alles auswählen
class ProtokollFilter_Gruppe(forms.Form):
auswahl = forms.ChoiceField(label='', choices=[("Halbjahr",'aktuelles Halbjahr'),('Woche','Woche'), ("Schuljahr",'aktuelles Schuljahr'), ('heute','heute'), ("all",'Alle Aufgaben'),("next",'nächstes Halbjahr'), ])
class Datum_Form(forms.Form):
aufgaben_seit = forms.DateField(label="", widget = forms.SelectDateWidget())
Code: Alles auswählen
def gruppe_uebersicht(req, gruppe_id):
gruppe = get_object_or_404(Lerngruppe, pk=gruppe_id)
wahl = "aktuelles Halbjahr"
form_filter = ProtokollFilter_Gruppe
tag_wahl = Datum_Form
if gruppe.lehrer != req.user and not req.user.is_superuser:
return HttpResponse("Zugriff verweigert")
titel = f"{gruppe.name}, {gruppe.lehrer.profil.vorname} {gruppe.lehrer.profil.nachname}"
protokoll = Protokoll.objects.filter(user__gruppe = gruppe) # alle Protokollobjekte der Gruppe
if req.method == 'POST':
auswahl = form_filter(req.POST)
#tag = tag_wahl(req.Post)
filter = auswahl.fields['auswahl'].choices
auswahl_liste = dict(filter)
if auswahl.is_valid():
auswahl = auswahl.cleaned_data['auswahl']
print(auswahl)
protokoll = protokoll_zeit_filter(protokoll, auswahl)
wahl = auswahl_liste[auswahl]
print(wahl)
Ich habe es auch mit einem formset probiert:
Code: Alles auswählen
class FilterForm(forms.Form):
auswahl = forms.ChoiceField(label='entweder hier einen Filter', choices=[("Halbjahr",'aktuelles Halbjahr'),('Woche','Woche'), ("Schuljahr",'aktuelles Schuljahr'), ('heute','heute'), ("all",'Alle Aufgaben'),("next",'nächstes Halbjahr'), ])
aufgaben_seit = forms.DateField(label='...oder Aufgaben seit', widget = forms.SelectDateWidget())
Code: Alles auswählen
<h2 style= "text-align: left;">
<form action="{% url 'gruppe_uebersicht' gruppe_id %}" method="POST">
{% csrf_token %}
{%for form in formset%}
{{form}}
<input type="submit" value="anwenden">
{%endfor%}
</form>
</h2>