Что я сделал, так это написал метод проверки ( «clean()»), который проверяет введенные пользователем данные. Если он не проходит проверку, к виджету этого ввода добавляется класс «ошибка». Затем, используя CSS, я придаю этому классу .error особый стиль.
Вот проблема: стиль ошибки неправильно применяется к полям «имя», «последний». имя» и «электронная почта» формы. Например, когда вы вводите неверную фамилию, поля «фамилия» и «имя» выделяются красным, а когда вы вводите неверный адрес электронной почты, поля «электронная почта» и «имя» выделяются.
Я просмотрел файл «forms.py» тысячу раз и не могу понять, в чем дело.
Вот код файла form.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
Код: Выделить всё
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.name}}
{{ form.last_name}}
{{ form.email }}
Save
Код: Выделить всё
.error{
background-color: lightcoral;
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... upon-error
Мобильная версия