9
votes

Django: Remplacement de la méthode propre () sous forme de formulaires - Question sur la levée d'erreurs

Je fais des choses comme ceci dans la méthode propre: xxx

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?

Edit # 1 : Toute solution pour ce qui précède sont super, mais aimerait quelque chose qui fonctionnerait également dans un scénario comme: xxx

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 ...


0 commentaires

4 Réponses :


7
votes
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)

1 commentaires

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: - /




3
votes

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])


0 commentaires