Проблема со стилизацией полей формы Django при возникновении ошибки

Я создаю свой первый сайт на Django и столкнулся с очень странной, на мой взгляд, проблемой. У меня есть форма на странице, и я хочу, чтобы, если пользователь вводит недопустимые данные в одно из ее полей, это поле помечалось определенным стилем CSS. Я написал метод валидации (метод "clean()"), который проверяет вводимые пользователем данные. Если он не проходит валидацию, к виджету этого ввода добавляется класс "error". Затем, используя CSS, я придаю этому классу .error определенный стиль.

Вот в чем проблема: стиль ошибки неправильно применяется к полям "имя", "фамилия" и "email" формы. Например, при вводе недопустимой фамилии оба поля "фамилия" и "имя" подсвечиваются красным, а при вводе недопустимого адреса электронной почты подсвечиваются оба поля "email" и "имя".

Я просмотрел файл "forms.py" тысячу раз и не могу понять, в чем дело.

Вот код файла "forms.py":

from django import forms
from .models import Appointment

class AppointmentForm(forms.ModelForm):
        
class Meta:
    model = Appointment
    fields = ['name', 'last_name', 'email', 'date', 'time']
    widgets = {
        "name": forms.TextInput(attrs={"class": "form-control"}),
        "last_name": forms.TextInput(attrs={"class": "form-control"}),
        "email": forms.EmailInput(attrs={"class": "form-control"}),
    }
            
def clean_name(self):
    name = self.cleaned_data["name"]

    if not name.isalpha():
        self.fields['name'].widget.attrs['class'] += ' error'
        raise forms.ValidationError("Please, input only letters", code="carac_esp")
        
    
    return name

def clean_last_name(self):
    last_name = self.cleaned_data["last_name"]

    if not last_name.isalpha():
        self.fields['last_name'].widget.attrs['class'] += ' error'
        raise forms.ValidationError("Please, input only letters", code="carac_esp")
    
    return last_name

def clean_email(self):
    email = self.cleaned_data["email"]
    allowed_domains = ['gmail.com', 'hotmail.com', 'yahoo.com']

    if not any(email.endswith(domain) for domain in allowed_domains):
        self.fields['email'].widget.attrs['class'] += ' error'
        raise forms.ValidationError("Please, input a valid email address", code="email_invalid")
    
    return email

А чтобы вы могли понять, что с HTML что-то не так, вот часть кода, где объявлена форма:

<form method="post" id="form_turnos">
    <div class="form-group">
        {% csrf_token %}
        
        {{ form.non_field_errors }}
        
        
        <div class="input_group">
                                        
            <div class="input_field">
                {{ form.name}}
            </div>
            
            <div class="input_field">
                {{ form.last_name}}
            </div>
                                        
            
            <div class="input_field">
                {{ form.email }}
            </div>
                                                
            
            <div class="input_field">
                <input type="text" class="form-control" name="date" id="id_date" placeholder="Date" readonly>
            </div>

            <div class="input_field">
                <input type="text" class="form-control" name="time" id="id_time" placeholder="Time" readonly>
            </div>

            <button type="submit" class="btn btn-primary" id="btn_save">Save</button>

        </div>

    </div>
</form>

И класс ошибок css, используемый для стилизации недействительных полей:

.error{
    background-color: lightcoral;
}
Вернуться на верх