zwei forms in einem Template

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

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:
Bild
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>
auf den Filter kann ich zugreifen. Beim Datum weiß ich nicht so recht wie.
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())
und Ausschnitt aus views.py:

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)
"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:

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())
da werden mir sogar die beiden forms angezeigt (da hätte ich gar nicht mit gerechnet)

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>
aber da stimmt was mit dem csrf_token nicht und weitergekommen bin ich da auch nicht.
Antworten