迁移旧系统课程数据至新系统时遇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
相关产品推荐
相关产品推荐

