【问题标题】:How to print ValidationError in template near the field where this happened?如何在发生这种情况的字段附近的模板中打印 ValidationError?
【发布时间】:2014-05-22 22:41:15
【问题描述】:

我正在重写方法 clean_:

def clean_password(self):
    value_password = self.cleaned_data.get('password')
    if len(str(self.cleaned_data['password'])) < 6:
        raise forms.ValidationError("Password must been more then 6 symbols")
    elif len(str(self.cleaned_data['password'])) > 45:
        raise forms.ValidationError("Password must been less 45 symbols")
    elif value_password is None:
        raise forms.ValidationError("Field of password can't are blank")
    return value_password

def clean_password2(self):
    value_password2 = self.cleaned_data.get('password2')
    if len(str(self.cleaned_data['password2'])) < 6:
        raise forms.ValidationError(self.error_messages['password_mismatch'],
                                    code='password_mismathc')
    elif len(str(self.cleaned_data['password2'])) > 45:
        raise forms.ValidationError("Password must been less 45 symbols")
    return value_password2

def clean(self):
    super(Form_registration, self).clean()
    data = self.cleaned_data
    if data["password"] != data["password2"]:
        raise forms.ValidationError("Password must been are equal")
    return data

如果我写这个 {{ form.errors }} 然后在首页打印错误,但我希望在表单密码附近打印错误。

我必须做什么?

【问题讨论】:

    标签: django


    【解决方案1】:

    更改您的 clean 方法以通过将字段名称传递给它来引发验证错误。

    def clean(self):
        super(Form_registration, self).clean()
        data = self.cleaned_data
        if data["password"] != data["password2"]:
            raise forms.ValidationError({'password': ["Passwords must be the same."]})
        return data
    

    编辑:

    您的模板应如下所示:

    <form action="" method="post">
        {% csrf_token %}
        {{ form.non_field_errors }}
        <div class="fieldWrapper">
            {{ form.password.errors }}
            <label for="{{ form.password.id_for_label }}">Password:</label>
            {{ form.password }}
        </div>
        <div class="fieldWrapper">
            {{ form.password2.errors }}
            <label for="{{ form.password2.id_for_label }}">Confirm Password:</label>
            {{ form.password2 }}
        </div>
    </form>
    

    【讨论】:

    • 我在首页看到 - “密码必须相等”
    • 在页面底部 - “密码必须相等”
    • 对不起,我错过了那部分。我已经添加了您应该使用的模板,或者至少是类似的模板。
    【解决方案2】:

    {{form.password1.errors}}

    只需在 form.field_id.errors 中添加您的字段 id 并将其放在所有表单元素旁边。

    【讨论】:

      猜你喜欢
      • 2016-05-25
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多