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

