Menu
CoddyTech

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.

challenge icon

Défi

Facile

Conservez ce que le visiteur a saisi après une erreur.

  1. Dans new_event, affichez le formulaire que vous avez vérifié après un POST ayant échoué, et un EventForm vide lors d’une requête GET.
  2. Supprimez le message error de la vue et de new_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()})
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Django