python - 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 中对此有特定的支持?
我想这样做部分是因为它更简洁,但主要是因为我已经有一个我想要提供的字段名称列表并且我想使用它而不是重复所有名称。
(字段列表基本上是固定的,更改它会影响系统范围。它可能偶尔会更改,但在程序运行时肯定不会更改)
解决方案
尝试覆盖__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)})
推荐阅读
- html - 如果侧边栏不可见,如何不请求侧边栏元素
- excel - Excel 自动将 7 位 CAS 编号转换为另一个数字(日期?)
- reactjs - 使用 bit.dev 时如何有效地 npm 链接?
- docker - Docker 中 .NET 的 SonarScanner - 使用 `docker run` 构建解决方案,但不使用 `docker-compose`
- flutter - 如何在颤振飞镖中将对象映射到不同类型的对象?
- java - 具有最终静态方法冗余的最终类
- node.js - 使用 Nodejs 提供静态文件
- c++ - C++ 新手,我怎样才能使这个 C++ 代码更好?
- c# - 是否可以使用实体框架 6 将实体的多个属性读/写到单个列中?如何?
- java - KeyEvent.getKeyText 和 NativeKeyEvent.getKeyText 返回不同的值