is_valid() vs clean() django formes
Dans le processus de trouver un moyen de valider mon django formes, je suis tombé sur deux méthodes is_valid() et clean() dans le django docs. Quelqu'un peut-il m'éclairer la façon dont ils sont différents ou de même? Quels sont les avantages et les inconvénients de l'un ou l'autre?
Grâce.
Vous devez vous connecter pour publier un commentaire.
is_valid()
appelsclean()
sur le formulaire automatiquement. Vous utilisezis_valid()
dans vos vues, etclean()
dans votre formulaire de classes.Votre
clean()
fonction sera de retourself.cleaned_data
qui, si vous allez le constater dans la suite de vue n'est pas géré par le programmeur.Vous n'avez pas à faire
clean_data = form.is_valid()
parce queis_valid()
appellera nettoyer et remplacer des données dans la forme de l'objet à nettoyer. Donc, tout dans votreif form.is_valid()
bloc sera propre et valide. Lename
champ dans votre bloc sera la version aseptisée qui n'est pas forcément ce qui était dansrequest.POST
.Mise à jour
Vous pouvez également afficher les messages d'erreur avec cette. Dans
clean()
si les données du formulaire n'est pas valide, vous pouvez définir un message d'erreur sur un domaine comme celui-ci:Maintenant
is_valid()
retournera False, donc dans le bloc else vous pouvez réafficher la page avec votre remplacé forme de l'objet et il affiche le message d'erreur si votre modèle utilise la chaîne d'erreur.clean()
ne sera pas nécessairement le retourself.cleaned_data
. Parfois, surtout pour les jeux de formulaires, il ne retourne rien. Cela m'a donné de la difficulté avant. Ils ont soulevé cette exigence, il y a plusieurs versions.Voulais juste ajouter que la meilleure façon maintenant pour ajouter une erreur à un formulaire que vous avez manuellement en validant is_valid() est à utiliser
Form.add_error(field, error)
pour se conformer avec Django ErrorDict objet.Faire
sortira funky lors du rendu
{{form.errors}}
, comme:à la place de l'
donc au lieu de faire:
Voir https://docs.djangoproject.com/en/1.10/ref/forms/api/#django.forms.Form.add_error