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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:35:24