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? Merci P> P> P> P> P>
4 Réponses :
Si vos données ne valident pas, votre Instance de formulaire n'aura pas de Nettoyage_data attribut p> blockQuote>
DJANGO DOC sur l'accès aux données "Nettoyer" p>
Utiliser
auto.is_valid () code>. p>
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.
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
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_
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.
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)
Bien que son ancien post, si vous souhaitez appliquer des validations sur plus d'un champ de même forme / modelform, utilisez Pour afficher les erreurs aux utilisateurs, vous pouvez utiliser La documentation est ici p> si vous voulez juste validation sur un seul champ de Formulaire / Modelform Utilisation propre () code>. Cette méthode renvoie add_error ( add_error () code> supprime automatiquement le champ de Clean_ 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