【问题标题】:Django: Password field "This field is required" errorDjango:密码字段“此字段是必需的”错误
【发布时间】:2016-04-29 22:30:32
【问题描述】:

我为User 创建了一个带有附加字段的新模型。

models.py:

class UserProfile(models.Model):

        user = models.OneToOneField(User)
        email = models.CharField(max_length=50)
        birthday = models.DateField(u'Birthday', blank=True, null=True)
        avatar = models.ImageField(Avatar', upload_to='profile/avatar', blank=True)

        def __unicode__(self):
                return self.user

然后我为用户创建注册表:

class RegistrationForm(ModelForm):
        username = forms.CharField(label=(u'Enter Your Username'))
        email = forms.EmailField(label=(u'Enter Your E-mail'))
        password = forms.CharField(label=(u'Enter Password'), widget=forms.PasswordInput(render_value=False))
        password1 = forms.CharField(label=(u'Verify Your Password'), widget=forms.PasswordInput(render_value=False))

        class Meta:
                model = UserProfile
                exclude = ('user',)

        def clean_email(self):
                email = self.cleaned_data['email']
                try:
                        User.objects.get(email=email)
                except User.DoesNotExist:
                        return email
                raise forms.ValidationError("User with same e-mail is already exist, please type another email")

        def clean_password(self):
                password = self.cleaned_data.get('password')
                password1 = self.cleaned_data.get('password1')

                if not password1:
                        raise forms.ValidationError("You have ti verify your password")
                if password != password1:
                        raise forms.ValidationError("Your passwords doesn't match")
                return password1

这是我对注册页面的看法:

def UserProfileRegistration(request):
        if request.user.is_authenticated():
                return HttpResponseRedirect('/info/')
        if request.method == 'POST':
                form = RegistrationForm(request.POST)
                if form.is_valid():
                        user = User.objects.create_user(username=form.cleaned_data['username'], email=form.cleaned_data['email'], password=form.cleaned_data['password'])
                        user.save()
                        user_profile = UserProfile(user=user)
                        user_profile.save()
                        return HttpResponseRedirect('/info/')
                else:
                        return render(request, 'profiles/registration.html', {'form':form})
        else:
                form = RegistrationForm()
                context = {'form':form}
                return render (request, 'profiles/registration.html', context)

还有我的 html 页面的样子:

 <form action="." method="POST">
 {% csrf_token %}
 {% if form.username.errors %}
    {% for error in form.username.errors %}
       <p>This field is required</p>
    {% endfor %}
 {% endif %}
 {{ form.username.label_tag}}
 {{ form.username }}
 {% if form.email.errors %}
    {% for error in form.email.errors %}
       <p>This field is required</p>
    {% endfor %}
 {% endif %}
 {{ form.email.label_tag }}
 {{ form.email }}
 {% if form.password.errors %}
    {% for error in form.password.errors %}
       <p>This field is required</p>
    {% endfor %}
 {% endif %}
 {{ form.password.label_tag }}
 {{ form.password }}
 {% if form.password1.errors %}
    {% for error in form.password1.errors %}
       <p>This field is required</p>
    {% endfor %}
 {% endif %}
 {{ form.password1.label_tag }}
 {{ form.password1 }}
 </form>

但是当我尝试注册用户时,我遇到了错误

此字段为必填项

对于password 字段。我不明白为什么。

如果你能帮助我,我会很高兴。

【问题讨论】:

  • 代替&lt;p&gt;This field is required&lt;/p&gt; 试试&lt;p&gt;{{ error }}&lt;/p&gt;
  • 谢谢。供您发表评论。现在我明白发生了什么
  • 您可以将您的评论替换为答案。
  • 发生了什么?
  • 在 forms.py 中我将 password = self.cleaned_data.get('password') password1 = self.cleaned_data.get('password1') 更改为 password = self.cleaned_data['password'] password1 = self.cleaned_data.['password1']

标签: django django-forms django-authentication


【解决方案1】:

尝试打印真正的错误消息,而不是打印预定义的错误消息。

代替

<p>This field is required</p>

使用

<p>{{ error }}</p>

【讨论】:

    【解决方案2】:

    在您的 clean_password 方法中,您在验证后返回 password1。您应该改为返回密码对象。对于模型表单,这很重要。

    保存模型时,表单字段名称用于决定哪个模型字段是哪个表单字段。

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 2020-06-02
      • 2019-04-13
      • 2012-12-02
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      相关资源
      最近更新 更多