Vérifier deux champs
Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 11 sur 20.
La Foire du livre d’hiver dure trois jours, et une date de fin ne doit pas précéder la date de début. Une méthode clean_<field> vérifie un seul champ ; une règle portant sur plusieurs champs va donc dans clean(), qui s’exécute après les vérifications propres à chaque champ. Voici un formulaire de réservation où un groupe de plus de 6 personnes doit indiquer un numéro de téléphone :
def clean(self):
cleaned_data = super().clean()
guests = cleaned_data.get("guests")
phone = cleaned_data.get("phone")
if guests and guests > 6 and not phone:
self.add_error("phone", "Groups over 6 need a phone number.")
return cleaned_dataUn champ qui a échoué est absent de cleaned_data, et une date facultative vide vaut None ; utilisez donc .get() et faites la comparaison uniquement lorsque les deux valeurs sont présentes.
self.add_error() place un message sous un champ. Lever forms.ValidationError dans clean() crée une erreur pour l’ensemble du formulaire, qui n’est affichée sous aucun champ : c’est {{ form.non_field_errors }} qui l’affiche.
Défi
Moyen- Ajoutez
end_dateàEventFormaprèsdate: une date qui peut être vide. - Refusez une date de fin antérieure à la date de début avec
The event cannot end before it starts., une erreur portant sur l’ensemble du formulaire. - Enregistrez
end_datedansnew_event. - Affichez les erreurs de l’ensemble du formulaire au-dessus des champs.
Cliquez sur Exécuter et essayez une date de fin antérieure à la date de début.
Essayez vous-même
import datetime
from django import forms
class EventForm(forms.Form):
title = forms.CharField(max_length=100)
date = forms.DateField()
place = forms.CharField(max_length=100)
description = forms.CharField(widget=forms.Textarea, required=False)
capacity = forms.IntegerField(min_value=1)
def clean_date(self):
date = self.cleaned_data["date"]
if date < datetime.date.today():
raise forms.ValidationError("The date cannot be in the past.")
return date
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