提问人:PAVAN KUMAR 提问时间:9/13/2023 最后编辑:PAVAN KUMAR 更新时间:9/13/2023 访问量:51
clean 方法中的 Django 表单验证问题
Django form validation problem in clean method
问:
我是 Django 的新手。在这里,每当我提交表单时,即使我在填写表单时犯了错误,也没有出现验证错误,并且验证错误在前端也不可见。尽快寻求帮助
views.py
from django.shortcuts import render
from testform import form
from django.http import HttpResponse
# Create your views here.
def studentform(request):
studentrecord=form.Student()
data={'data':studentrecord}
if request.method=='POST':
studentrecord=form.Student(request.POST)
if studentrecord.is_valid():
print('validating')
print('sname',studentrecord.cleaned_data['Name'])
print('sloc',studentrecord.cleaned_data['location'])
print('smail',studentrecord.cleaned_data['mail'])
else:
print('form is not valid')
return HttpResponse('thanks for form filling')
return render (request,'testform/try.html',context=data)
form.py
from django import forms
class Student(forms.Form):
Name=forms.CharField()
location=forms.CharField()
mail=forms.EmailField()
course=forms.CharField()
def clean(self):
total_clean=super().clean()
inputname=total_clean['Name']
if len(inputname)<5:
raise forms.ValidationError('Type the name in below 5 letters')
input_location=total_clean['location']
if input_location =='Antartica':
raise forms.ValidationError('Antartica is not valid')
input_course=total_clean['course']
if input_course not in ['python','java']:
raise forms.ValidationError('select either python or java')
答:
0赞
Vinita Sonakiya
9/13/2023
#1
我认为您错过了在 html 文件中添加表单错误标签。 添加了类似这样的东西。
<body>
<!-- your html elements -->
{{form.errors}}
</body>
评论
0赞
PAVAN KUMAR
9/13/2023
嘿,我在你的回答中添加了我的代码。你能告诉我在哪里添加{{form.errors}}吗?
0赞
Vinita Sonakiya
9/14/2023
您需要将其添加到 try.html 文件中。
0赞
PAVAN KUMAR
9/14/2023
仍然显示错误
0赞
willeM_ Van Onsem
9/13/2023
#2
视图逻辑将始终显示表单已正确填写,即使填写不正确。
def studentform(request):
if request.method == 'POST':
studentrecord = form.Student(request.POST)
if studentrecord.is_valid():
print('validating')
print('sname', studentrecord.cleaned_data['Name'])
print('sloc', studentrecord.cleaned_data['location'])
print('smail', studentrecord.cleaned_data['mail'])
return HttpResponse('thanks for form filling')
else:
studentrecord = form.Student()
data = {'data': studentrecord}
return render(request, 'testform/try.html', context=data)
在表单中,您还应该返回清理后的数据:
从 Django 导入表单
from django import forms
class Student(forms.Form):
# …
def clean(self):
total_clean = super().clean()
inputname = total_clean['Name']
if len(inputname) < 5:
raise forms.ValidationError('Type the name in below 5 letters')
input_location = total_clean['location']
if input_location == 'Antartica':
raise forms.ValidationError('Antartica is not valid')
input_course = total_clean['course']
if input_course not in ['python', 'java']:
raise forms.ValidationError('select either python or java')
return total_clean
评论
0赞
PAVAN KUMAR
9/13/2023
嘿,还是行不通。.每当我提交包含错误数据的表单时,它都会在控制面板中显示(执行其他部分)表单无效。当我提交包含正确数据的表格时,它会显示(如果部分,则为部分)感谢您的填写。.主要问题是,每当我输入错误的数据时,它都不会警告用户(我在验证错误中提到的语句),并且错误在前端也不可见
0赞
willeM_ Van Onsem
9/13/2023
@PAVANKUMAR:该部分应与 绑定,因此不应与 绑定,因此它应该在“外部”范围内。else
if request.method == 'POST'
form.is_valid()
0赞
PAVAN KUMAR
9/13/2023
还是同样的问题..错误未出现在前端。.每当我提交带有错误数据的表单时(它以其他方式执行),如果我使用正确的数据提交(它会转到我编码的其他页面)。但是每当我在前端输入错误的数据时,验证错误都不会出现在表单顶部,也不会出现在控制面板中
0赞
willeM_ Van Onsem
9/13/2023
@PAVANKUMAR:它不应该计算 ,这就是缩进很重要的原因。它应该停在这条线上,然后继续这条线。你有调试器吗?else
if studentrecord.is_valid()
data = ...
0赞
PAVAN KUMAR
9/13/2023
是的,我确实有 django 调试器工具栏
评论
{}