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.
Aufgabe
Einfach- Rendere in
new_eventil modulo che è stato convalidato dopo un POST non riuscito e uno vuoto con una richiesta GET. - Rimuovi il messaggio
errordalla vista e danew_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()})
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