首页 > 解决方案 > Django Rest Framework,如何从名称列表中添加序列化器字段

问题描述

我有一个 Django Rest Framework Serializer,其中包含许多浮点字段,例如

class MySerializer(serializers.Serializer):
    unitID = serializers.CharField(required=True, allow_blank=False, max_length=50)
    timestamp = serializers.DateTimeField(required=True)
    VonDC = serializers.FloatField(required=False)
    VonAC = serializers.FloatField(required=False)
    VoffDC = serializers.FloatField(required=False)
    VonDC2 = serializers.FloatField(required=False)
    etc...

我希望能够从字段名称列表中创建这些字段,例如

the_fields = ['VonDC', 'VonAC', 'VoffDC', 'VonDC2', etc...] 

class MySerializer(serializers.Serializer):
    unitID = serializers.CharField(required=True, allow_blank=False, max_length=50)
    timestamp = serializers.DateTimeField(required=True)

    for f in the_fields:
        <something>[f] = serializers.FloatField(required=False)
        or
        <some_function>(<something>, f, serializers.FloatField(required=False) )

我无法找到上面的“某物”或“某些功能”是什么。

是否有可能做到这一点?python中有没有办法向类添加属性并从变量中获取名称?还是在 Django Rest Framework 中对此有特定的支持?

我想这样做部分是因为它更简洁,但主要是因为我已经有一个我想要提供的字段名称列表并且我想使用它而不是重复所有名称。

(字段列表基本上是固定的,更改它会影响系统范围。它可能偶尔会更改,但在程序运行时肯定不会更改)

标签: pythondjango-rest-framework

解决方案


尝试覆盖__init__()序列化程序的方法,如下所示,

the_fields = ['VonDC', 'VonAC', 'VoffDC', 'VonDC2', ]


class MySerializer(serializers.Serializer):
    unitID = serializers.CharField(required=True, allow_blank=False, max_length=50)
    timestamp = serializers.DateTimeField(required=True)

    def __init__(self, *args, **kwargs):
        super(MySerializer, self).__init__(*args, **kwargs)
        for field in the_fields:
            self.fields.update({field: serializers.FloatField(required=False)})

推荐阅读