Formulaires liés et non liés
Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 7 sur 20.
Envoie le formulaire avec la date next friday : la page revient vide, avec seulement « Veuillez vérifier le formulaire. » La vue a vérifié le formulaire contenant ce que tu as saisi, puis l’a jeté et en a créé un nouveau, vide.
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, sans erreurs. Affiché avec {{ form }}, un formulaire lié montre chaque valeur et, à côté d’un champ incorrect, son erreur, comme Enter a valid date.
Une vue avec un formulaire a 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 gère les deux premiers cas.
Défi
FacileConservez ce que le visiteur a saisi après une erreur.
- Dans
new_event, affichez le formulaire que vous avez vérifié après un POST ayant échoué, et unEventFormvide lors d’une requête GET. - Supprimez le message
errorde la vue et denew_event.html: le formulaire affiche maintenant ses propres erreurs.
Saisissez next friday comme date : votre titre est conservé et le message Enter a valid date. apparaît au-dessus du champ 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