我正在用 Django 构建我的第一个网站,遇到了一个我认为非常奇怪的问题。我的页面上有一个表单,我希望如果用户在表单中的一个字段中输入了无效数据,系统会通知我,如果用户 ...
我正在用 Django 构建我的第一个网站,我遇到了一个我认为非常奇怪的问题。我的页面中有一个表单,我希望如果用户在表单的某个字段中输入了无效数据,则该字段会用特定的 CSS 样式标记。我所做的就是编写一个验证方法(“clean()”方法),检查用户提供的输入。如果未通过验证,则将类“error”添加到该输入的小部件中。然后,我使用 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 %}
<!DOCTYPE html>
<html lang="es">
<head>
<link rel="stylesheet" href="{% static 'home/css/style2.css' %}">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
</head>
<body>
<div id="turnos">
<fieldset>
<legend id="legend-turnos">Agende su turno</legend>
<div id="div_formbox">
<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.nombre }}
</div>
<div class="input_field">
{{ form.apellido }}
</div>
<div class="input_field">
{{ form.email }}
</div>
<button type="submit" class="btn btn-primary" id="btn_guardar">Guardar</button>
</div>
</div>
</form>
</div>
用于设置无效字段样式的 \'styles2.css\' 文件的 css 错误类:
.error{
background-color: lightcoral;
}