7
votes

Django écraser la méthode propre

Lorsque vous écrivez une méthode de formulaire propre Comment savez-vous si sa validation infructueuse sur aucun des champs? par exemple. Dans le formulaire ci-dessous si je écrase la méthode propre Comment savoir si le formulaire a échoué de validation sur aucun des champs? XXX

Merci


0 commentaires

4 Réponses :


5
votes

Si vos données ne valident pas, votre Instance de formulaire n'aura pas de Nettoyage_data attribut

DJANGO DOC sur l'accès aux données "Nettoyer"

Utiliser auto.is_valid () .


2 commentaires

Donc, je voudrais juste faire un chèque sur nettoyé_data E.G. Sinon Self.Cleaned_Data: #o quelque chose


Non, l'attribut n'existe pas, vous obtiendrez un attributError. J'ai étendu ma réponse.



12
votes

Vous pouvez vérifier si des erreurs ont été ajoutées à l'erreur DICT:

def clean(self, value):
    cleaned_data = self.cleaned_data

    if self._errors and 'title' in self._errors:
        raise forms.ValidationError("You call that a title?!")
    else:
        return cleaned_data 


4 commentaires

HI Mark Je suis exactement en utilisant cette procédure, mais l'erreur de validation est affichée en haut de la page Admin (Change_Form), comment puis-je afficher le message d'erreur juste au-dessus de ce champ pour lequel j'applique la validation. Merci d'avance


Le moyen le plus simple de faire est de soulever l'erreur de validation à l'intérieur du Clean_ pour votre champ. Voir docs.djangoproject.com/fr/1.4/ref/Forms/validation < / a>


Salut mark j'ai écrit cette augmentation formes.validationError ({'interview_type': ["message d'erreur",]}) Mais il me montre le message d'erreur en haut de Change_form .Can tu me dis que dois-je modifier dans ce domaine.


Ceci est mieux posé comme sa propre question plutôt qu'un commentaire.



1
votes

Voici un exemple simple de remplacement propre () code> dans django.forms.form code> et utilise également django-accolades code> pour pour Anonymousrequirepirémixin code> Pour que seuls les utilisateurs anonymes visitent la page de fuite:

class LoginView(AnonymousRequiredMixin, FormView):
    """
    Main Login. And Social Logins
    """
    template_name = 'core/login.html'
    form_class = LoginForm
    success_url = reverse_lazy('blog:index')

    def get_success_url(self):
        try:
            next = self.request.GET['next']
        except KeyError:
            next = self.success_url
        return next

    def form_valid(self, form):
        cd = form.cleaned_data
        user = auth.authenticate(username=cd['login_username'], 
            password=cd['login_password'])
        if user:
            auth.login(self.request, user)
            messages.info(self.request, 'You are logged in.')
        return super(LoginView, self).form_valid(form)


0 commentaires

2
votes

Bien que son ancien post, si vous souhaitez appliquer des validations sur plus d'un champ de même forme / modelform, utilisez propre () code>. Cette méthode renvoie nettoyée_data ​​strong> dictionnaire.

Pour afficher les erreurs aux utilisateurs, vous pouvez utiliser add_error (, "Votre message") code> méthode. Cela montrera les erreurs avec le nom de champ plutôt sur le formulaire. L'exemple est indiqué ci-dessous: p>

add_error () code> supprime automatiquement le champ de Nettyed_Data ​​strong> Dictionnaire, vous n'avez pas à la supprimer manuellement. Aussi, vous n'avez rien d'importer pour l'utiliser. P>

La documentation est ici p> xxx pré>

si vous voulez juste validation sur un seul champ de Formulaire / Modelform Utilisation Clean_ () code>. Cette méthode prendra les valeurs du dictionnaire nettoyé_data ​​fort>, puis vous pouvez vérifier les erreurs logiques. Renvoie toujours la valeur une fois que vous avez terminé de vérifier la logique. P>

def clean_password(self):

  password = self.cleaned_data['password']

  if len(password)<6:
    msg = 'password is too short'
    self.add_error('password', msg)

  return password


0 commentaires