【问题标题】:Custom endpoint with basic serializer?具有基本序列化程序的自定义端点?
【发布时间】:2018-01-29 21:55:11
【问题描述】:

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

端点声明:

@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 可序列化的")

知道我怎样才能完成这项工作吗?

编辑:

我在视图集中使用以下代码完成了这项工作:

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 中。如果有更好的方法,我很想知道。

【问题讨论】:

  • 您需要获取 Thing 的实例并将其传递给序列化程序。

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


【解决方案1】:
serializer = ThingMetaSerializer

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

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

改为。

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多