Django表单初始值设置无效求助:页面输入框为空
问题排查:FormView get_initial设置初始值不生效
问题原因
你在模板中手动编写了<input>标签,没有使用Django表单的内置渲染逻辑。get_initial方法是给表单对象提供初始数据,但只有通过表单字段的渲染语法(如{{ form.nickname }})输出输入框时,才会自动将初始值绑定到输入框上,手动写的input标签不会关联表单的初始数据。
另外,你的表单模板缺少{% csrf_token %}标记,直接提交POST请求会被Django的CSRF保护机制拦截,这是额外需要修复的问题。
解决方案
方案一:使用Django表单字段渲染输入框(推荐)
修改模板中的输入框部分,替换为Django表单字段的渲染语法,这样会自动带上get_initial设置的初始值:
<!DOCTYPE html> <html> <head> <title>Nickname Edit</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <form class="container" action="http://localhost:8000/profile/edit/" method="POST"> {% csrf_token %} <!-- 必须添加,否则POST请求会被拒绝 --> <label for="nickname"> Nickname </label> {{ form.nickname }} <!-- 表单字段自动渲染输入框并填充初始值 --> <div> {{ form.nickname.errors }} </div> <button type="submit">Sign me up!</button> </form> </body> </html>
你的UserEditFormView和UserEditForm代码无需修改,保持原样即可。
方案二:手动绑定初始值到input标签
如果坚持手动编写input标签,可以直接从表单的initial属性中取值,填充到value属性:
<!DOCTYPE html> <html> <head> <title>Nickname Edit</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <form class="container" action="http://localhost:8000/profile/edit/" method="POST"> {% csrf_token %} <!-- 必须添加CSRF令牌 --> <label for="nickname"> Nickname </label> <input id="nickname" type="text" name="nickname" value="{{ form.initial.nickname }}"/> <div> {{ form.nickname.errors }} </div> <button type="submit">Sign me up!</button> </form> </body> </html>
内容的提问来源于stack exchange,提问作者ESP
相关产品推荐
相关产品推荐

