Je fais des choses comme ceci dans la méthode propre: mais cela signifie que le formulaire ne peut émerger que l'une de ces erreurs à la fois. Existe-t-il un moyen pour la forme de lever ces deux erreurs? P> où fooaddform est un modelForm et a des contraintes uniques qui pourraient également entraîner des erreurs. . Si quelqu'un connaît quelque chose comme ça, ce serait génial ... p> p>
4 Réponses :
errors = []
if self.cleaned_data['type'].organized_by != self.cleaned_data['organized_by']:
errors.append('The type and organization do not match.')
if self.cleaned_data['start'] > self.cleaned_data['end']:
errors.append('The start date cannot be later than the end date.')
if errors:
raise forms.ValidationError(errors)
GRRR .... essayait de donner ceci +1, mais j'ai cliqué avec accidentellement deux fois et cela dit maintenant que "Vote trop vieux pour être changé" GRRR ... Quoi qu'il en soit, belle réponse :) Mais j'ai toujours un problème avec ça ... J'ai une méthode propre sur un modelforme, où il est important de vérifier les contraintes uniques, mais si je le fais: Si je fais des erreurs: Soulever les formulaires.validationError (erreurs) Super (compétitionAdddForm, auto). Clean () Alors c'est soit mes erreurs ou les erreurs de contrainte uniques: - /
Cela fonctionne très bien (je n'étais pas sûr de si j'avais aimé que les messages d'erreur soient attachés aux champs plutôt que dans l'ensemble du formulaire, mais il a en fait plus de sens de cette façon) et les contraintes uniques de ModelForm fonctionnent également. Donc, j'accepte celui-ci - merci! :)
Si vous préférez que les messages d'erreur soient attachés au formulaire plutôt que sur des champs spécifiques, vous pouvez utiliser la touche " __ tout __ code>" comme ceci: msg = 'The type and organization do not match.'
self._errors['__all__'] = ErrorList([msg])
Bien que son ancien poste, si vous souhaitez moins de code, vous pouvez utiliser La documentation est ici p> add_error () code> méthode pour ajouter des messages d'erreur. J'extuit la réponse de @ Kemar pour afficher le cas utilisé: add_error () code> supprime automatiquement le champ du dictionnaire Nettoyage_data, vous n'avez pas à la supprimer manuellement.
Aussi, vous n'avez rien d'importer pour l'utiliser. P>