Проблема со стилизацией полей формы 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>
Это заставляло меня сходить с ума в течение последнего месяца. Пожалуйста, кто-нибудь, помогите!