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

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

Сообщение Anonymous »

Я создаю свой первый веб-сайт с помощью Django и столкнулся, как мне кажется, с очень странной проблемой. У меня есть форма на странице, и я хочу, чтобы, если пользователь вводит недопустимые данные в одно из ее полей, это поле помечалось определенным стилем CSS. Я написал метод проверки (метод «clean()»), который проверяет вводимые пользователем данные. Если он не проходит проверку, к виджету этого ввода добавляется класс «ошибка». Затем, используя CSS, я придаю этому классу .error особый стиль.
Вот проблема: стиль ошибки неправильно применяется к полям «имя», «фамилия» и «электронная почта» формы. Например, когда вы вводите неверную фамилию, поля «фамилия» и «имя» выделяются красным, а когда вы вводите неверный адрес электронной почты, поля «электронная почта» и «имя» выделяются.
Я просмотрел файл «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

Файл «views.py»:
from django.shortcuts import render
from .forms import TurnoForm

def home(request):

if request.method == "POST":
form = TurnoForm(request.POST)
form.is_valid()

if form.is_valid():
form.save()
return render(request, "home/index2.html", {"form": form})

else:

return render(request, "home/index2.html", {"form": form})

else:

form = TurnoForm()
return render(request, "home/index2.html", {"form": form})

Вот упрощенная версия HTML, показывающая только ту форму, которая вызывает у меня проблемы:
{% load static %}











Agende su turno



{% csrf_token %}

{{ form.non_field_errors }}




{{ form.nombre }}

{{ form.apellido }}

{{ form.email }}

Guardar








И класс ошибок CSS файла «styles2.css», используемый для стилизации недопустимых полей:
.error{
background-color: lightcoral;
}


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

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

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

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

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

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