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

迁移旧系统课程数据至新系统时遇JSON序列化错误求助

解决"Object of type ThingOldClassSerializer is not JSON serializable"错误

错误原因

  • 你在Response中直接传递了ThingOldClassSerializer的实例对象,而DRF的Response会自动将响应内容序列化为JSON,但序列化器实例本身不支持JSON序列化。
  • 同时返回的thingcurrentclass是OldTemp模型实例,同样无法直接被JSON序列化。

解决方案

修改views.py中的get和post方法,将序列化器实例替换为其data属性(已序列化的字典,支持JSON转换),模型实例也通过序列化器处理后再返回:

class ThingOldToNewView(generics.CreateAPIView):
    queryset = OldTemp.objects.all
    serializer_class = ThingOldClassSerializer

    def get(self, request, pk, curr_old):
        oldclass = get_object_or_404(OldTemp, pk=pk)
        serializer = ThingOldClassSerializer(oldclass)
        # 传递序列化后的字典数据,而非序列化器实例
        return Response({'serializer': serializer.data, 'thingcurrentclass': serializer.data})

    def post(self, request, pk, curr_old):
        oldclass = get_object_or_404(OldTemp, pk=pk)
        serializer = ThingOldClassSerializer(oldclass, data=request.data)
        if serializer.is_valid():
            self.check_object_permissions(request, oldclass)
            serializer.save(legacy_active=False)
            return redirect('home_page')
        # 验证失败时返回错误信息和旧数据的序列化结果
        return Response({'serializer': serializer.errors, 'thingcurrentclass': ThingOldClassSerializer(oldclass).data})

补充说明

  • serializer.data是序列化器处理模型实例后生成的可JSON序列化字典,包含所有指定字段的数据。
  • 验证失败时,serializer.errors存储了具体的错误信息,同样是可序列化的格式,适合返回给前端展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:09:58