Django Admin中_save、_addanother、_continue按钮功能异常排查
Django Admin 提交按钮行为异常排查方案
问题:Django Admin中「保存」「保存并添加另一个」「保存并继续编辑」三个按钮点击后行为完全一致,均仅保存模型并跳转至主页;且打印request.POST时,未发现按钮对应的_save/_addanother/_continue参数。
排查步骤与解决方法
1. 检查自定义Admin模板
若你自定义了change_form.html模板,需确认提交按钮区域的代码符合Django默认规范:
- 按钮必须设置正确的
name属性,示例代码如下:
<div class="submit-row"> {% if show_save %}<input type="submit" value="保存" class="default" name="_save">{% endif %} {% if show_save_and_add_another %}<input type="submit" value="保存并添加另一个" name="_addanother">{% endif %} {% if show_save_and_continue %}<input type="submit" value="保存并继续编辑" name="_continue">{% endif %} </div>
- 确保按钮的
type为submit,而非button(若使用button类型,需手动绑定提交逻辑并携带按钮参数)。
2. 排查前端自定义JS
检查页面是否存在自定义JavaScript代码:
- 若通过AJAX或手动构造
FormData提交表单,需确保将点击按钮的name和value添加到提交数据中。例如:
document.querySelector('.submit-row input[type="submit"]').addEventListener('click', function(e) { e.preventDefault(); const form = this.form; const formData = new FormData(form); // 必须添加当前按钮的参数 formData.append(this.name, this.value); // 后续提交逻辑... });
3. 检查后端中间件
排查是否存在自定义中间件修改了request.POST:
- 临时禁用所有自定义中间件,测试按钮行为是否恢复正常。若恢复,逐一排查中间件代码,确认是否过滤了
_save/_addanother/_continue这类参数。
4. 验证请求原始数据
在response_add方法中打印原始请求体,确认参数是否被前端正确发送:
def response_add(self, request, obj): print(request.body) # 查看原始POST数据 print(request.POST) return super().response_add(request, obj)
- 若
request.body中存在按钮参数但request.POST中没有,说明后端逻辑(如中间件)过滤了参数;若原始数据中也没有,问题出在前端。
内容的提问来源于stack exchange,提问作者NackiE23
相关产品推荐
相关产品推荐

