Сообщение об ошибке валидации не отображается в django

Ошибка валидации Password not matched не появляется, если я отдельно обращаюсь к полям {{form.psrd}} (поле пароля) и {{form.rpsrd}} (поле Re-Type password). Но сообщение об ошибке появляется, если я использую {{form.as_p}}.

Это мой forms.py:

from django import forms


class formdata(forms.Form):
    name = forms.CharField(
        max_length=20, widget=forms.TextInput(attrs={'class': 'input'}))
    email = forms.EmailField(widget=forms.TextInput(attrs={'class': 'input'}))
    psrd = forms.CharField(min_length=8, widget=forms.PasswordInput(
        attrs={'class': 'input'}), label='Password')
    rpsrd = forms.CharField(min_length=8, widget=forms.PasswordInput(attrs={'class': 'input'}),
                            label='Re-Type Password')

    def clean(self):
        cleaned_data = super().clean()

        p = self.cleaned_data['psrd']
        rp = self.cleaned_data['rpsrd']

        if p != rp:
            raise forms.ValidationError('Password not matched')

Тело файла regi.html :

<body>
    <form method="post">{% csrf_token %}
        <label>
            <p class="label-txt">ENTER YOUR NAME</p>
            {{form.name}}
            <div class="line-box">
                <div class="line"></div>
            </div>
        </label>

        <label>
            <p class="label-txt">ENTER YOUR EMAIL</p>
            {{form.email}}
            <div class="line-box">
                <div class="line"></div>
            </div>
        </label>

        <label>
            <p class="label-txt">ENTER YOUR PASSWORD</p>
            {{form.psrd}}
            <div class="line-box">
                <div class="line"></div>
            </div>
        </label>

        <label>
            <p class="label-txt">RE-ENTER YOUR PASSWORD</p>
            {{form.rpsrd}}
            <div class="line-box">
                <div class="line"></div>
            </div>
        </label>

        <button type="submit">submit</button>
    </form>
</body>

Как Django Docs объясняет рендеринг формы вручную, вам нужно добавить еще два тега:

{{ form.non_field_errors }} Для ошибок, не исходящих из явных полей

и {{ form.field.errors }} для ошибок поля. Таким образом, в вашем шаблоне:

 <label>
            <p class="label-txt">RE-ENTER YOUR PASSWORD</p>
            {{ form.rpsrd }}
            {% if form.rpsrd.errors %}
                <div class="error">{{ form.rpsrd.errors }}</div>
            {% endif %}
            <div class="line-box">
                <div class="line"></div>
            </div>
        </label>
Вернуться на верх