【问题标题】:Form Validation error for required field in DajangoDjango中必填字段的表单验证错误
【发布时间】:2020-10-15 18:59:30
【问题描述】:

我有一个 html 页面,我在其中显示文本文件,显示图像 。下面给出了此屏幕的 HTML 代码。

如果用户使用表单验证错误消息输入无效的电子邮件 ID 或“输入您的电子邮件”文本字段中存在的电子邮件 ID,我想在屏幕上显示错误消息。目前我在下面写了一段代码显示表单验证错误消息。但此错误消息始终显示在“新密码”测试字段旁边。如果用户输入无效的电子邮件 ID 或现有的电子邮件 ID,有什么方法可以在“通过电子邮件发送您的邮件”旁边显示表单验证错误消息?

HTML 代码:

<fieldset class="module aligned wide">
{% csrf_token %}

    <div class="form-row">
    {{ form.old_password.errors }}
    <label for="{{ form.id_old_password.id_for_label }}">Old password:</label> {{ form.old_password }}
    </div>

    <div class="form-row">
    {{ form.new_password1.errors }}
    <label for="{{ form.id_new_password1.id_for_label }}">New password:</label> {{ form.new_password1 }}
    </div>

    <div class="form-row">
    {{ form.new_password2.errors }}
    <label for="{{ form.id_new_password2.id_for_label }}">Password (again):</label> {{ form.new_password2 }}
    </div>

    <div class="form-row">
    {{ form.email_reset.errors }}
    <label for="{{ form.email_reset.id_for_label }}">Enter Your Email (optional):</label> <input id="id_email_reset" placeholder="Enter your email" name="email_reset" type="email" pattern=".+@.+\.com"/>
    </div>

</fieldset>

Forms.py

class CustomPasswordChangeForm(PasswordChangeForm):
    """ This is a customized class to validate the password by overriding
        the existing function "clean_new_password1" from base class PasswordChangeForm.
    """

    MIN_LENGTH = 8
    MAX_LENGTH = 64

    field_order = ['oldpassword', 'password1', 'password2']

    def clean_new_password1(self):
        password1 = self.cleaned_data.get('new_password1')

        # At least MIN_LENGTH long
        if len(password1) < self.MIN_LENGTH:
            raise forms.ValidationError("The new password must be atleast %d characters long." % self.MIN_LENGTH)

        # At most MAX_LENGTH long
        if len(password1) > self.MAX_LENGTH:
            raise forms.ValidationError("The new password must be maximum %d characters long." % self.MAX_LENGTH)

        #if email id is given, then update it in database.
        if len(self.data['email_reset'].strip()) > 0:
            self.user.email = self.data['email_reset']

            if (User.objects.filter(email=self.user.email).count() > 1):
                raise forms.ValidationError("This email Id is already exist for different account. Please use different email id.")

        return password1

【问题讨论】:

    标签: javascript html jquery django django-forms


    【解决方案1】:

    首先,为什么您在 clean_password_new 方法中进行电子邮件验证?这就是为什么您的所有错误都显示在 password_new 字段中的原因 在cleanclean_email_reset 中进行操作 如果您在clean() 中执行此操作,您可以使用self.add_error("email_reset", "error message") 或者只是根据电子邮件验证将所有代码复制到clean_email_reset 方法中

    【讨论】:

    • 我尝试了两种方法 clean_email_reset 或 clean。当我尝试使用 clean_email_reset 时,此方法从未调用过,不确定确切原因。当我尝试使用 clean 时,无法使用您建议添加错误的方法在屏幕上的文本字段 email_reset 显示错误消息。仅供参考,密码更改表仅附带旧密码,密码1和密码2。我已通过自定义密码更改表添加了email_reset。
    • 您是如何将 email_reset 添加到表单中的?如果您像这样添加它email_reset = forms.CharField(label="Enter your e-mail", required=False),那么您应该会收到带有代码的错误消息,我在之前的帖子中发布过。
    【解决方案2】:
    <div class="form-row">
        {{form.old_password.label_tag}}
        {{form.old_password}}
        {% if form.old_password.errors %}
        {% for error in form.old_password.errors %}
        <div class="alert alert-danger validation">
            <strong>{{ error|escape }}</strong>
        </div>
        {% endfor %}
        {% endif %}
    </div>
    

    css

    .validation{
        position: absolute;
        z-index: 1000;
        padding: 10px;
    }
    

    【讨论】:

    • alert alert-danger 是引导类
    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 2017-03-30
    • 1970-01-01
    • 2023-03-22
    • 2016-02-23
    • 2017-06-24
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多