Je rencontre des problèmes pour remplacer la méthode propre d'un formulaire Django intégré (django.contrib.auth.SetPasswordForm). Ce formulaire a deux champs: new_password1 et new_password2.redéfinir la méthode propre du formulaire pour personnaliser les messages d'erreur
donc dans mon views.py j'appelle le formulaire personnalisé (MySetPasswordForm
):
def reset_confirm(request, uidb64=None, token=None):
return password_reset_confirm_delegate(request,
template_name='app/reset_confirm.html',
set_password_form = MySetPasswordForm, uidb64=uidb64,
token=token, post_reset_redirect=reverse('main_page'))
Dans mon forms.py: Je veux définir ma propre méthode propre pour montrer mes messages d'erreur personnalisés. voici comment je l'ai écrit MySetPasswordForm
:
from django.contrib.auth.forms import SetPasswordForm
class MySetPasswordForm(SetPasswordForm):
error_messages = { 'password_mismatch': _("Missmatch!"), }
def clean(self):
password1 = self.cleaned_data.get('new_password1', '')
password2 = self.cleaned_data.get('new_password2', '')
print password1 #prints user's entered value
print password2 #prints nothing!!
print self.data['new_password2'] #prints user's entered value
if password1 == '':
self._errors["new_password1"] = ErrorList([u"enter pass1!"])
if password2 == '':
self._errors["new_password2"] = ErrorList([u"enter pass2"])
elif password1 != password2:
raise forms.ValidationError(
self.error_messages['password_mismatch'],
code='password_mismatch',
)
return self.cleaned_data
Le problème est que lorsque l'utilisateur d'entrer le mot de passe de répétition mal, au lieu d'obtenir "Missmatch" error
, il donne "enter pass2"
! De même, print password2
n'imprime pas la valeur saisie par l'utilisateur pour le mot de passe2. Qu'est-ce que je fais de mal dans ce code ?! et quelle est la meilleure façon de faire des messages d'erreur personnalisés?
p.s. L'utilisation de SetPasswordForm d'origine dans la vue fonctionne correctement.
Merci pour la réponse , alors comment puis-je définir le dict 'error_messages'? –
Vous définissez déjà le dict 'error_messages' dans votre question. J'ai ajouté un exemple. – Alasdair
impressionnant tnx. Je suppose que je suis encore un débutant dans l'utilisation des formulaires :) J'ai aussi besoin d'une validation min-length sur mon terrain, puis-je faire cette validation en utilisant error_messages (si oui comment?) Ou dois-je utiliser la méthode clean? –