Проблема со стилизацией полей формы 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>

Это заставляло меня сходить с ума в течение последнего месяца. Пожалуйста, кто-нибудь, помогите!

Вернуться на верх