Django: ajouter une erreur non field de view?

j'ai un formulaire Django avec un tas de champs que je rends dans le modèle. J'ai aussi quelques éléments D'entrée HTML que je veux valider dans la vue en accédant au request.POST vars. Si ceux-ci ne sont pas validés, je veux injecter une erreur dans le formulaire Django pour que je puisse l'afficher sur la page. Est-il un moyen de le faire?

25
demandé sur mpen 2010-11-19 23:17:37
la source

3 ответов

vous pouvez aussi utiliser add_error () méthode. Travaux pour Django > = 1.7.

Si vous définissez fieldNone formulaire de traiter l'erreur "non_field". Donc:

form.add_error(None, "I'm non-field error")

fonctionne comme un charme.

34
répondu grafa 2017-06-20 22:13:53
la source

ajoutant à la réponse de Daniel, la syntaxe spécifique est:

form.errors['__all__'] = form.error_class(["error msg"])

Notez que vous pouvez remplacer par '__all__' avec la constante NON_FIELD_ERRORS pour une meilleure compatibilité (crédit grafa).

from django.forms.forms import NON_FIELD_ERRORS
22
répondu mpen 2017-05-23 13:31:23
la source

eh Bien, vous pouvez insérer n'importe quoi dans le formulaire errors dictionnaire, et non le champ des erreurs d'aller dans errors['__all__'].

Mais pourquoi êtes-vous garder certains champs de l'Django forme, uniquement pour leurs erreurs à la fin? Pourquoi ne pas mettre tous les champs dans le formulaire, en premier lieu? Si c'est juste que vous utilisez une modelform et que vous voulez y ajouter des champs, Vous pouvez le faire dans Django en déclarant simplement les champs au niveau de la forme - alors vous pouvez définir des méthodes propres pour eux dans forme.

class ExtendedModelForm(forms.ModelForm):
    extra_field_1 = forms.CharField()
    extra_field_2 = forms.CharField()

    def clean_extra_field_1(self):
        ...etc...
6
répondu Daniel Roseman 2010-11-19 23:26:41
la source

Autres questions sur