自定义端点与基本序列化器?

时间:2017-08-21 18:35:35

标签: python django python-2.7 django-rest-framework django-serializer

在我的模型视图中,我创建了一个自定义端点,并且我尝试序列化一些快速元信息以发送出去。

端点声明:

@list_route(methods=['get'], url_path='meta')
def get_meta_details(self, request):
    serializer = ThingMetaSerializer
    return Response(serializer.data)

ThingMetaSerializer:

class ThingMetaSerializer(serializers.Serializer):

    some_data = serializers.SerializerMethodField(method_name='ret_zero')

    def ret_zero(self):
        return 0

每次运行端点时都会出现以下错误:

  

TypeError(repr(o)+"不是JSON可序列化的")

知道如何让这项工作成功吗?

编辑:

我使用viewset中的以下代码完成了这项工作:

meta_data = {
    'some_data': 0,
}

@list_route(methods=['get'], url_path='meta')
def get_meta_details(self, request):
    # do some calculations
    return JsonResponse(self.meta_data)

但是这种方法不能自动生成Django RF Schema。如果有更好的方法,我很想知道。

1 个答案:

答案 0 :(得分:0)

serializer = ThingMetaSerializer

这不会初始化序列化程序。你应该使用:

serializer = ThingMetaSerializer(instance={'some field': 'some data'})

代替。