Django Rest Framework:如何序列化列表列表? [英] Django Rest Framework: How serialize list of list?

查看:331
本文介绍了Django Rest Framework:如何序列化列表列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用Django Rest序列化程序序列化Floats列表?

How to serialize list of list of Floats using Django Rest serializers?

我的数据为( repr 我的对象列表):

My data is (repr of my list of object):

[{
    'id': '413',
    'data': [
        [None, 32.33125, None, None],
        [None, 37.96, 48.70112359550562, 66.118],
        [None, None, 58.06576923076923, 77.31023809523809],
        [None, None, None, 110.0075],
        [None, None, None, 139.89]
    ]
}, {
    'id': '406',
    'data': [
        [None, 35.33125, None, None],
        [None, 37.96, 43.123, 66.118],
        [None, None, 58.12, 72,123],
        [None, None, None, 119.000234],
        [None, None, None, 139.89]
    ]
}]

对于试图提出不同方法的用户,我需要说明我需要序列化程序类,因为我想使用 generics.ListAPIView ,我需要设置 serializer_class 属性。

For users trying to propose different approach, I need to explain that I need serializer class because I want to use generics.ListAPIView and I need to setup serializer_class property.

推荐答案

您必须创建 Field 类,该类可与<$一起使用c $ c> Null 值:

You must create Field class that will work with Null values:

class FixedFloatField(serializers.FloatField):
    def to_internal_value(self, data):
        if data is None:
            return data
        return super().to_internal_value(data)

    def to_representation(self, value):
        if value is None:
            return value
        return super().to_representation(value)

(因为标准的抛出 TypeError:float()参数必须是字符串或数字,而不是'NoneType'

现在使用此序列化程序(技巧是使用 ListField ):

Now use this Serializer (the trick is to use ListField):

class SearchResultSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    data = serializers.ListField(
        child=serializers.ListField(
            child=FixedFloatField(
                allow_null=True,
                required=False,
                default=None
            )
        )
    )

这篇关于Django Rest Framework:如何序列化列表列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆