Formulaires liés et non liés
Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 7 sur 20.
Envoyez le formulaire avec la date next friday : la page revient vide, avec seulement « Veuillez vérifier le formulaire. » La vue a affiché un nouveau formulaire vide, tandis que le formulaire qu’elle a vérifié contenait les informations.
Un formulaire construit avec des données est lié : ContactForm(request.POST) contient ce que le visiteur a saisi et, après is_valid(), les erreurs. ContactForm() est non lié : vide et sans erreurs. Affiché avec {{ form }}, un formulaire lié montre chaque valeur et, sous un champ incorrect, son erreur, par exemple Enter a valid date.
Une vue avec un formulaire comporte donc trois cas :
- Une requête GET : afficher un formulaire non lié.
- Une requête POST qui échoue : afficher le formulaire lié qu’elle a vérifié.
- Une requête POST qui réussit : enregistrer et rediriger.
Un seul render() à la fin suffit pour les deux premiers cas.
Défi
Facile- Dans
new_event, affiche le formulaire qui a été vérifié après un POST échoué, et un formulaire vide lors d’une requête GET. - Supprime le message d’
errorde la vue et denew_event.html: le formulaire affiche maintenant ses propres erreurs.
Appuie sur Run, envoie le formulaire avec la date next friday, puis regarde sous la date.
Essayez vous-même
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()})
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Formulaires
2Formulaires Django
Un formulaire DjangoCréer un formulaire3Formulaires de modèle
Un formulaire de modèleModifier un événementSupprimer un événementMessages de réussiteEntraînez-vous par vous-même : Playground Django