Django 表单验证不保留带有 ValidationError 的密码

Django Form Validation don't keep password with ValidationError

我已经编写了基于干净字段的验证。为了检查我输入了不匹配的密码,这从两个字段中擦除了密码。这会惹恼用户。我想要这样 "If error let the user change a bit..don't retype whole password"。但是用户名验证将用户名保留在字段中 在 error.Why 之后发生这种情况?

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

为什么在 error.See 验证逻辑后用户名值(保持在表单中)和密码值(闪烁)是相同的。

来自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).

所以你需要像这样初始化你的输入:

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