Django не выводит ошибку валидации пользовательского валидатора формы

Итак, у меня есть следующая форма

class SignUpForm(UserCreationForm):
    email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={
        'class': tailwind_class
    }))
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': tailwind_class}))
    password2 = forms.CharField(label='Confirm Password', widget=forms.PasswordInput(attrs={'class': tailwind_class}))
    company_id = forms.CharField(label='Company Identifier',
                                 widget=forms.PasswordInput(attrs={'class': tailwind_class}))

    class Meta:
        model = get_user_model()
        fields = ('email', 'password1', 'password2', 'company_id')

    # Custom validator for the company id
    def clean_company_id(self):
        company_id = self.cleaned_data['company_id']

        if not Company.objects.get(id=company_id):
            raise ValidationError("This Company ID doesn't exist")

        # Return value to use as cleaned data
        return company_id

чей валидатор работает, за исключением отображения сообщения об ошибке в случае не валидации.

Это мой шаблон:

<form class="form shadow-2xl min-w-[360px] max-w-[360px] p-4 bg-woys-purple rounded-lg text-white" method="post" action=".">
            {% csrf_token %}
            <div class="error-wrapper mb-2">
                <div class="errors text-woys-error-light text-center">{{ form.errors.email }}</div>
                <div class="errors text-woys-error-light text-center">{{ form.errors.password2 }}</div>
                <div class="errors text-woys-error-light text-center">{{ form.non_field_errors }}</div>
            </div>
...

Это не сработает.

Когда вы делаете:

SomeModel.objects.get(...)

Если объект не существует в параметрах фильтра get(), это вызовет ошибку SomeModel.DoesNotExist, поэтому попробуйте заменить .get() на filter(...).exists() и таким образом вы получите вашу пользовательскую ошибку.

Я имею в виду изменение этой строки кода:

if not Company.objects.get(id=company_id):

Кроме того, если вы просто хотите обновить сообщение об ошибке, вы можете указать и переопределить сообщения для каждого из полей и каждого типа или ошибки, которая может произойти для данного типа поля.

См. этот пост, на который был дан ответ ранее, где описано, как это сделать:

Создание пользовательских сообщений об ошибках с помощью моделей форм

Кроме того, я только что заметил, что в вашем шаблоне вы не отображаете ошибки для этого поля, поэтому, пожалуйста, добавьте строку для отображения ошибок поля для id компании

<div class="errors text-woys-error-light text-center">{{ form.errors.company_id }}</div>
Вернуться на верх