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

如何用JavaScript发送带重复键payload的传统非API类型POST请求

传统表单POST提交多值重复参数的实现方案(适配Django Admin场景)

核心实现思路

传统HTML原生表单天然支持同名称多参数值提交,不需要手动拼接参数字符串,只需为每个_selected_action值创建独立的隐藏input元素即可,提交时会自动生成&_selected_action=5&_selected_action=10格式的请求体,完全匹配Django Admin的参数解析规则。

可直接复用的代码实现

// 入参说明:
// selectedIds: 选中的记录ID数组,例如 [5, 10]
// adminActionUrl: Django Admin对应操作的提交地址
function submitAdminMultiAction(selectedIds, adminActionUrl) {
  const form = document.createElement('form')
  form.method = 'POST'
  form.action = adminActionUrl
  // 配置表单编码格式,和Django Admin默认要求一致
  form.enctype = 'application/x-www-form-urlencoded'

  // 注入Django必填的CSRF校验参数
  const csrfInput = document.createElement('input')
  csrfInput.type = 'hidden'
  csrfInput.name = 'csrfmiddlewaretoken'
  // 从Cookie中读取Django默认写入的CSRF Token
  csrfInput.value = document.cookie.split('; ').find(row => row.startsWith('csrftoken=')).split('=')[1]
  form.appendChild(csrfInput)

  // 批量注入选中项参数
  selectedIds.forEach(recordId => {
    const actionInput = document.createElement('input')
    actionInput.type = 'hidden'
    actionInput.name = '_selected_action'
    actionInput.value = recordId
    form.appendChild(actionInput)
  })

  // 注入Django Admin要求的操作类型参数,替换为你实际需要执行的操作标识
  const actionTypeInput = document.createElement('input')
  actionTypeInput.type = 'hidden'
  actionTypeInput.name = 'action'
  actionTypeInput.value = 'delete_selected' // 示例为批量删除,可替换为自定义操作名
  form.appendChild(actionTypeInput)

  // 执行提交
  document.body.appendChild(form)
  form.submit()
  document.body.removeChild(form)
}

常见问题说明

之前手动拼接URLSearchParams后无法正常提交的原因是:如果将拼接好的完整参数字符串作为单个input的值提交,后台只会识别为单个_selected_action参数,无法解析为数组。只有创建多个同name的独立input元素,才能触发表单的多值提交逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:45:04