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

如何将Ajax传入Django的QueryDict转换为字典列表

在Django中将Ajax传入的QueryDict转换为字典列表

需求说明

需要将Ajax提交的如下QueryDict数据:

<QueryDict: {'data[0][val]': ['0.00'], 'data[0][id]': ['e82c2454-7d0f-4af2-90a8-58998e2e4780'], 'data[0][modal]': ['appointment'], 'data[1][val]': ['0.00'], 'data[1][id]': ['e82c2454-7d0f-4af2-90a8-58998e2e4780'], 'data[1][modal]': ['appointment'], 'data[2][val]': ['0.00'], 'data[2][id]': ['05b796cf-27de-42e0-b5ef-59ba5e8aeb0a'], 'data[2][modal]': ['additional_study'], 'data[3][val]': ['0.00'], 'data[3][id]': ['05b796cf-27de-42e0-b5ef-59ba5e8aeb0a'], 'data[3][modal]': ['additional_study']}>

转换为仅包含val和id字段的字典列表:

[
    {'val': '0.00', 'id': 'e82c2454-7d0f-4af2-90a8-58998e2e4780'},
    {'val': '0.00', 'id': 'e82c2454-7d0f-4af2-90a8-58998e2e4780'},
    {'val': '0.00', 'id': '05b796cf-27de-42e0-b5ef-59ba5e8aeb0a'},
    {'val': '0.00', 'id': '05b796cf-27de-42e0-b5ef-59ba5e8aeb0a'}
]

实现代码

直接解析QueryDict的键名,提取对应字段并分组:

# 从请求中获取QueryDict,比如request.POST
query_dict = request.POST

result = []
# 提取所有唯一的索引值
indices = set()
for key in query_dict.keys():
    # 从data[0][val]格式的键中提取索引0
    idx = key.split('[')[1].split(']')[0]
    indices.add(idx)

# 按索引顺序构建字典列表
for idx in sorted(indices, key=int):
    item = {
        'val': query_dict.get(f'data[{idx}][val]', ''),
        'id': query_dict.get(f'data[{idx}][id]', '')
    }
    result.append(item)

优化建议

如果前端可以调整提交方式,建议将数据序列化为JSON字符串发送,后端直接解析会更高效:

// 前端Ajax提交示例
const data = [
    {val: '0.00', id: 'xxx', modal: 'xxx'},
    // ...其他数据
];
$.ajax({
    url: '/your-url/',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify(data),
    // ...其他配置
});

后端解析代码:

import json

def your_view(request):
    if request.method == 'POST':
        data_list = json.loads(request.body)
        # 提取需要的字段
        result = [{'val': item['val'], 'id': item['id']} for item in data_list]
        # ...后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:28:20