Yugandhar Chaudhari
Yugandhar Chaudhari

Reputation: 3964

Django Form Validation don't keep password with ValidationError

I have written clean field based validation. To check I enter unmatching passwords this wipe off passwords from both the fields. This can annoy user. I want this like "If error let the user change a bit..don't retype whole password". However username validation keeps the username in the field after error.Why this is happening?

class signupform(ModelForm):
 prmqpass=forms.CharField(widget=forms.PasswordInput())
 prmqpass1=forms.CharField(widget=forms.PasswordInput())
 class Meta:
  model=prmqsignup
  exclude=['prmqactivated']

def clean_prmqpass(self):
  cd=self.cleaned_data
  pwd=cd.get("prmqpass")
  if len(str(pwd))<6:
   raise ValidationError("Password must be at least of six characters")
  if not passstrength(pwd):
   raise ValidationError("For stronger security password must contain at least one uppercase,lowercase,number and special character")
  return pwd

 def clean_prmquname(self):
  cd=self.cleaned_data
  usrname=cd.get("prmquname")
  if len(usrname)<5:
   raise ValidationError("Username too short choose more than four characters")
  if   prmqsignup.objects.exclude(pk=self.instance.pk).filter(prmquname=usrname).exists():
   raise ValidationError('Username "%s" is already in use.' % usrname)
  return usrname

 def clean(self):
  cd=self.cleaned_data
  pwd=cd.get("prmqpass")
  pwd1=cd.get("prmqpass1")
  if not pwd==pwd1:
   raise ValidationError("Passwords don't match.")
  return cd

Why username value(staying in form) and password value(flashing away) after error.See validation logic is same.

Upvotes: 0

Views: 652

Answers (1)

solarissmoke
solarissmoke

Reputation: 31404

From the documentation:

Password input: <input type='password' ...>

Takes one optional argument:

render_value: Determines whether the widget will have a value filled in when the form is re-displayed after a validation error (default is False).

So you need to initialise your inputs like so:

prmqpass = forms.CharField(widget=forms.PasswordInput(render_value=True))

Upvotes: 3

Related Questions