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

Django UpdateView提交后数据未更新、未跳转问题求助

Django UpdateView表单提交不生效、数据未更新问题解决方案

核心原因

UpdateView内置逻辑会在收到POST请求后自动绑定表单数据、执行验证,只有验证通过才会保存数据、跳转到get_success_url指定的地址。你现在的情况是表单验证未通过,触发了校验失败逻辑,重新渲染编辑页面,所以看不到数据更新也不会跳转。

具体修复点

1. 修正textarea标签的错误用法

HTML中<textarea>没有value属性,内容必须写在开闭标签之间,你当前的写法会导致提交的parameter_list字段永远为空,修改如下:

<!-- 修改前 -->
<textarea id="id_parameter_list" name="parameter_list" value = "{{my_case.parameter_list}}" placeholder="Copy your parameter string here directly"></textarea>

<!-- 修改后 -->
<textarea id="id_parameter_list" name="parameter_list" placeholder="Copy your parameter string here directly">{{ my_case.parameter_list }}</textarea>

2. 修正下拉选框的value赋值逻辑

Django模型choices的格式为(数据库存储值, 前端展示值),你当前把展示值赋值给了option的value属性,不符合规范,也会导致后续修改choices配置后直接报错,所有下拉框的option都按如下修改:

<!-- 修改前 -->
<option value={{value}} {%if my_case.executable_type == key %}selected{%endif%}>{{key}}</option>

<!-- 修改后 -->
<option value="{{ key }}" {%if my_case.executable_type == key %}selected{%endif%}>{{ value }}</option>

3. 优化表单错误打印逻辑,查看具体报错信息

你当前只打印了字段名,看不到具体错误描述,修改模板的错误打印部分:

<!-- 修改前 -->
{% for i in form.errors %}
{{i}}
{% endfor %}

<!-- 修改后 -->
{% for field, errors in form.errors.items %}
<p>* {{ field }}字段错误:{{ errors|join:", " }}</p>
{% endfor %}

同时可以在视图中添加form_invalid方法,后台打印完整错误信息:

class EditCaseView(UpdateView):
    # 原有代码保持不变
    def form_invalid(self, form):
        print("表单验证失败,错误详情:", form.errors)
        return super().form_invalid(form)

4. 可选优化:保留用户输入的修改内容

你当前所有输入框的value都是从数据库原始值my_case获取,表单验证失败重新渲染时会丢失用户刚输入的修改内容,建议改成从form实例取值:

<input type="text" id="id_name" name="name" value = "{{ form.name.value|default:my_case.name }}" placeholder="short_unique_string" required>

所有输入字段都按这个规则修改即可。


内容的提问来源于stack exchange,提问作者Wason

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:01