Menu
CoddyTech

Gebundene und ungebundene Formulare

Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 7 von 20.

Sende das Formular mit dem Datum next friday ab: Die Seite wird leer angezeigt, mit dem einzigen Hinweis „Bitte überprüfe das Formular.“ Die Ansicht hat ein neues, leeres Formular erstellt, und das Formular, das sie überprüft hat, enthielt die Angaben.

Ein mit Daten erstelltes Formular ist gebunden: ContactForm(request.POST) enthält, was der Besucher eingegeben hat, und nach is_valid() die Fehler. ContactForm() ist ungebunden: leer und ohne Fehler. Wird es mit {{ form }} dargestellt, zeigt ein gebundenes Formular jeden Wert und unter einem ungültigen Feld den entsprechenden Fehler an, zum Beispiel Gib ein gültiges Datum ein.

Eine Ansicht mit einem Formular hat also drei Fälle:

  • Ein GET: ein ungebundenes Formular darstellen.
  • Ein POST, der fehlschlägt: das gebundene Formular darstellen, das überprüft wurde.
  • Ein POST, der erfolgreich ist: speichern und weiterleiten.

Ein render() am Ende deckt die ersten beiden Fälle ab.

challenge icon

Aufgabe

Einfach
  • Rendere in new_event il modulo che è stato convalidato dopo un POST non riuscito e uno vuoto con una richiesta GET.
  • Rimuovi il messaggio error dalla vista e da new_event.html: ora il modulo mostra i propri errori.

Premi Run, invia il modulo con la data next friday e controlla sotto la data.

Probier es selbst

from django.shortcuts import get_object_or_404, redirect, render

from .forms import EventForm
from .models import Event


def event_list(request):
    q = request.GET.get("q", "")
    events = Event.objects.all()
    if q:
        events = events.filter(title__icontains=q)
    return render(request, "events/event_list.html", {"events": events, "q": q})


def event_detail(request, pk):
    event = get_object_or_404(Event, pk=pk)
    return render(request, "events/event_detail.html", {"event": event})


def new_event(request):
    error = None
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = Event.objects.create(
                title=form.cleaned_data["title"],
                date=form.cleaned_data["date"],
                place=form.cleaned_data["place"],
            )
            return redirect("events:detail", pk=event.pk)
        error = "Please check the form."
    return render(request, "events/new_event.html", {"error": error, "form": EventForm()})
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Formulare

Übe selbstständig: Django-Playground