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

Django中如何获取ModelForm表单submit类型input的name属性值

问题原因

你视图中的判断逻辑存在错误:request.POST.get('name')是尝试获取名为name的表单字段值,但你的两个提交按钮的name属性分别是Save和Delete,点击对应按钮时,只有被点击的那个按钮的name会作为键、value作为值被提交到后端。


正确实现方案

1. 模板代码无需调整,保持现有写法即可

<form action="" method="POST">{% csrf_token %}
    {{Form.as_p}}
    <input type="submit" name="Save" value="Save">
    <input type="submit" name="Delete" value="Delete">
</form>

2. 视图逻辑修改为如下写法

def post(self,request,text_id):
    text_data = None
    try:
        text_data = Text.objects.get(pk=text_id)
        a = FormText(request.POST,instance=text_data)
    except Text.DoesNotExist:
        a = FormText(request.POST)
    
    # 直接判断对应按钮的name属性是否存在于POST请求中即可
    if 'Delete' in request.POST:
        # 删除操作直接操作模型实例更稳妥,避免未绑定实例的表单调用delete报错
        if text_data:
            text_data.delete()
        return HttpResponse('删除成功')
    elif 'Save' in request.POST:
        # 保存前先做表单校验是Django表单的标准最佳实践
        if a.is_valid():
            a.save()
            return HttpResponse('保存成功')
        else:
            return HttpResponse('表单数据不合法')
    return HttpResponse('无效操作')

额外注意事项

  • 不要使用裸except,尽量捕获指定异常比如Text.DoesNotExist,避免隐藏其他未知错误
  • 如果需要适配多语言或者修改按钮显示文字,判断name是否存在的逻辑比判断value更稳定,不受显示内容修改的影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 18:30:01