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
相关产品推荐
相关产品推荐

