DRF在Response(serializer.data)

时间:2016-12-18 15:58:52

标签: django-rest-framework

在成功保存对象后,有一种常见的模式可以返回serializer.data。但是,如果to_internal_value返回Django对象(例如在PrimeryKeyRelatedField中),则Response会产生此错误:

raise TypeError(repr(o) + " is not JSON serializable")

一些解决方案:

  1. 以其他方式运行该数据,即FooSerializer(data=serializer.data)

  2. 手动替换它,即serializer.data['field'] = serializer.data['field'].pk

  3. 在某处继承某些内容,以便Response可以接受Django对象并默认为__str__表示(但可能是不可能的,除非isinstance能够知道它是否为#{1}}。是models.Model)的子类

  4. 不要返回[整个]对象。另一方显然有他们发送的数据的副本,所以没有理由发回服务器没有改变的字段。

  5. 这些解决方案中哪一个最具Pythonic,还是没有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

  

在成功保存对象后,有一种常见的模式可以返回serializer.data。

不,这可能是一种常见的反模式。

它返回不同的serializer.validated_data。