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