Django: Remplacement de la méthode clean () dans les formulaires - question sur l'augmentation des erreurs
J'ai été faire des choses comme cela dans le propre méthode:
if self.cleaned_data['type'].organized_by != self.cleaned_data['organized_by']:
raise forms.ValidationError('The type and organization do not match.')
if self.cleaned_data['start'] > self.cleaned_data['end']:
raise forms.ValidationError('The start date cannot be later than the end date.')
Mais alors cela signifie que le formulaire ne peut que susciter de l'une de ces erreurs à la fois. Est-il un moyen pour le formulaire de lever les deux de ces erreurs?
EDIT #1:
Toutes les solutions pour le ci-dessus sont grands, mais j'aimerais quelque chose qui serait de travailler dans un tel scénario:
if self.cleaned_data['type'].organized_by != self.cleaned_data['organized_by']:
raise forms.ValidationError('The type and organization do not match.')
if self.cleaned_data['start'] > self.cleaned_data['end']:
raise forms.ValidationError('The start date cannot be later than the end date.')
super(FooAddForm, self).clean()
Où FooAddForm est un ModelForm et a ses propres contraintes qui pourraient aussi provoquer des erreurs. Si quelqu'un sait quelque chose comme ça, ce serait génial...
source d'informationauteur Monika Sulik
Vous devez vous connecter pour publier un commentaire.
De la documentation:
https://docs.djangoproject.com/en/1.7/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other
Si vous préférez que les messages d'erreur, être attaché à la forme plutôt que sur des champs spécifiques, vous pouvez utiliser la touche "
__all__
" comme ceci:Aussi, comme le Django docs expliquer: "si vous voulez ajouter une nouvelle erreur à un domaine particulier, vous devriez vérifier si la clé existe déjà dans
self._errors
ou pas. Sinon, créez une nouvelle entrée pour la clé donnée, la tenue d'un videErrorList
instance. Dans les deux cas, vous pouvez ensuite ajouter votre message d'erreur à la liste pour le nom du champ en question et il sera affiché lorsque le formulaire est affiché."Bien que son ancien poste, si vous voulez moins de code que vous pouvez utiliser
add_error()
méthode pour ajouter des messages d'erreur. Je suis l'extension de la @kemar, la réponse à montrer le cas:add_error()
supprime automatiquement le champ de cleaned_data dictionnaire, vous n'avez pas à le supprimer manuellement.Aussi, vous n'avez pas à importer quoi que ce soit pour l'utiliser.
la documentation est ici