Form.is_valid()始终返回False?Django表单验证问题求助
嘿,我帮你揪出问题啦!你的MyForm.is_valid()一直返回False,核心原因是前端输入的name属性和表单字段不匹配,还有几个小细节得调整,咱们一步步来解决:
1. 最关键的问题:前端输入与表单字段不匹配
你的HTML里输入框的name是full_name,但PostForm对应的模型字段是Username——Django表单验证时会从POST数据里找和字段名完全一致的键,这俩完全对不上,自然验证失败!
修改HTML里的input标签,把name="full_name"改成name="Username":
<input type="text" class="form-control" id="Username" name="Username" placeholder="Enter the name of Patient here.">
2. 模型的__str__方法有错误
你的Post模型里__str__方法返回self.name,但模型里根本没有name字段,只有Username,这会导致后续保存或显示对象时触发AttributeError,赶紧改过来:
# Models.py from django.db import models class Post(models.Model): Username = models.CharField(max_length = 20) def __str__(self): return self.Username # 这里改成self.Username
3. URL正则的小问题
你的urls.py里正则是^/submit$,但Django的URL路径默认不带开头的斜杠,这个会导致路由匹配失败,把开头的斜杠去掉:
# Urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^submit$', views.register , name = 'submit'), # 去掉开头的/ ]
4. 新手调试小技巧
以后遇到is_valid()返回False的情况,建议在视图里打印表单的错误信息,能快速定位问题:
# Views.py def register(request): if request.method == 'POST': my_form = PostForm(request.POST) # 变量名改成小写开头,符合Python规范 if my_form.is_valid(): return HttpResponse("<h1>Is_Valid is TRUE.</h1>") else: print(my_form.errors) # 打印错误到控制台,方便调试 return HttpResponse("<h1>Is_Valid is False.</h1>") else: return HttpResponse("<h1> GET REQUEST>>>> </h1>")
按照上面的修改调整后,你的表单验证应该就能正常工作啦!
内容的提问来源于stack exchange,提问作者Zahid Khan
相关产品推荐
相关产品推荐

