Django中Multi Select BooleanField提交后返回JsonResponse仅显示最后一个值如何解决
问题原因
Django的request.POST是QueryDict类型,针对同一键对应多个值的多选提交场景,直接通过默认方式取值/序列化时,仅会返回该键对应的最后一个值,所以你得到的agree_2仅显示22。
解决方法
方法1:极简通用方案
如果可以接受所有字段的返回值都为列表格式(比如csrfmiddlewaretoken返回为["token"]),直接将QueryDict转为普通Python字典即可:
elif 'submit_multiple' in request.POST: return JsonResponse(dict(request.POST))
方法2:按需区分单/多值格式
如果需要单值字段保留字符串格式、多值字段保留列表格式,可以遍历QueryDict的lists()方法自行构造返回字典:
elif 'submit_multiple' in request.POST: res_dict = {} for key, values in request.POST.lists(): # 长度为1的字段取第一个值转为字符串,多值字段保留列表 res_dict[key] = values[0] if len(values) == 1 else values return JsonResponse(res_dict)
方法3:指定字段单独处理
如果仅需要处理agree_2这一个多值字段,也可以单独通过getlist()方法获取完整值列表:
elif 'submit_multiple' in request.POST: res_dict = dict(request.POST) # 单独覆盖多值字段的返回结果 res_dict['agree_2'] = request.POST.getlist('agree_2') return JsonResponse(res_dict)
内容的提问来源于stack exchange,提问作者Ahmad Afif A. Hariz
相关产品推荐
相关产品推荐

