Проблема со стилем поля формы Django при ошибкеCSS

Разбираемся в CSS
Ответить
Anonymous
 Проблема со стилем поля формы Django при ошибке

Сообщение Anonymous »

Я создаю свой первый веб-сайт с помощью Django и столкнулся, как мне кажется, с очень странной проблемой. У меня есть форма на странице, и я хочу, чтобы, если пользователь вводит неверные данные в одно из ее полей, это поле помечалось определенным стилем CSS.
Что я сделал, так это написал метод проверки ( «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
И чтобы вы могли увидеть, есть ли что-то не так с HTML, вот часть кода, в которой объявлена ​​форма:

Код: Выделить всё


{% csrf_token %}

{{ form.non_field_errors }}




{{ form.name}}

{{ form.last-name}}

{{ form.email }}





Save





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

Подробнее здесь: https://stackoverflow.com/questions/783 ... upon-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»