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: Die Seite wird leer angezeigt, nur mit „Bitte überprüfe das Formular.“ Die View hat das Formular geprüft, das deine Eingaben enthielt, es dann verworfen und ein neues, leeres Formular erstellt.
Ein Formular, das mit Daten erstellt wurde, ist gebunden: ContactForm(request.POST) enthält die Eingaben des Besuchers 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 neben einem fehlerhaften Feld den zugehörigen Fehler an, zum Beispiel Enter a valid date.
Eine View mit einem Formular hat also drei Fälle:
- Ein GET: ein ungebundenes Formular rendern.
- Ein POST, der fehlschlägt: das gebundene Formular rendern, das geprüft wurde.
- Ein POST, der erfolgreich ist: speichern und weiterleiten.
Ein einziges render() am Ende übernimmt die ersten beiden Fälle.
Aufgabe
EinfachBehalte nach einem Fehler, was der Besucher eingegeben hat.
- Rendere in
new_eventnach einem fehlgeschlagenen POST das geprüfte Formular und bei einem GET ein leeresEventForm. - Entferne die Meldung
erroraus der View und ausnew_event.html: Das Formular zeigt seine Fehler jetzt selbst an.
Sende next friday als Datum: Dein Titel bleibt erhalten, und über dem Datumsfeld erscheint Enter a valid date.
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()})
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Formulare
2Django-Formulare
Ein Django-FormularEin Formular erstellenÜbe selbstständig: Django-Playground