You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:38:53