You need to enable JavaScript to run this app. 使用Django REST Framework取字段时报list索引需为整数错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Django REST Framework取字段时报list索引需为整数错误如何解决

错误原因

你初始化序列化器时指定了many=True,匹配你传入的外层为数组的JSON结构,此时serializer.data返回的是列表类型,无法直接用字符串作为索引取值,这是报错的直接原因。
另外还有两个易忽略的错误点:

  • 使用DRF序列化器必须先调用is_valid()完成数据校验,才能读取data属性,否则会触发逻辑异常。
  • 你提交的JSON中同一个对象包含两个重复的email键,不符合JSON规范,后端实际接收时前一个email值会被后一个覆盖,只会保留admin22@admin.com。

解决方案

方案1:保留外层数组结构

如果业务逻辑确实需要外层传数组,且每次数组内只有一个会议对象,修改代码如下:

serializer = EmailsListSerializer(data=request.data, many=True)
# 开启校验不通过自动抛出异常
serializer.is_valid(raise_exception=True)
# 取列表第一个元素的对应字段
meeting_date = serializer.data[0]['meeting_date']
meeting_timezone = serializer.data[0]['time_zone']

方案2:去掉外层数组结构

如果业务不需要传递多个对象,可调整前端传参格式,去掉外层[]直接传入JSON对象,同时修改序列化器初始化参数:

# 此时前端传参结构为:{"email": "xxx", "meeting_date":"2021-06-29", "time_zone" : "Asia/Tehran"}
serializer = EmailsListSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
# 可直接用字符串索引取字段
meeting_date = serializer.data['meeting_date']
meeting_timezone = serializer.data['time_zone']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:24:07