【问题标题】:ModelForm not finding field when submitting提交时ModelForm找不到字段
【发布时间】:2016-06-03 10:40:43
【问题描述】:

我目前有这个用于验证新用户注册的 ModelForm:

class RegistrationForm(forms.ModelForm):
    email = forms.CharField(max_length=75, required=True)
    password = forms.PasswordInput()
    password_confirm = forms.PasswordInput()

    class Meta:
        model = User
        fields = ['username', 'email', 'password']

    def clean(self):
        if self.password != self.password_confirm:
            self.add_error('password_confirm', 'Passwords do not match.')

用户需要确认他的密码。提交此表单时,我收到以下错误:

/register 处的值错误

“RegistrationForm”没有名为“password_confirm”的字段。

我也尝试使用 self.cleaned_data,但仍然遇到同样的错误。

fields属性不能被移除,也不能添加password_confirm。

如何解决这个问题?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    passwordpassword_confirm 被定义为小部件,而不是表单字段。

    定义两个 CharField 并传递 widget 参数:

    class RegistrationForm(forms.ModelForm):
        email = forms.CharField(max_length=75, required=True)
        password = forms.CharField(widget=forms.PasswordInput)
        password_confirm = forms.CharField(widget=forms.PasswordInput)
    

    【讨论】:

    • 太好了,必须将您的答案和 Sayse 的答案混合起来才能使其正常工作。
    【解决方案2】:

    你需要先调用super clean,然后你应该使用清理后的数据而不是字段。

    def clean(self):
        cleaned_data = super(RegistrationForm, self).clean()
        if cleaned_data.get('password') != cleaned_data.get('password_confirm'):
            self.add_error('password_confirm', 'Passwords do not match.')
    

    【讨论】:

    • 我之前尝试过cleaned_data,但仍然错过了Daniel在下面指定的小部件部分,将cleaned_data答案与Daniel的答案混合起来就像一个魅力。
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 2019-02-08
    • 2013-03-24
    • 2013-04-06
    • 2013-02-12
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多