擅长:python、mysql、java
<p>我认为“通常”下面的代码可以将FloatFields添加为类的属性。你知道吗</p>
<p>请注意,for循环在类之后,而不是在其主体中。你知道吗</p>
<pre><code>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 name in meas_names:
setattr(MySerializer, name, serializers.FloatField(required=False))
</code></pre>
<p>然而序列化程序。序列化程序有一个元类,其中包含对类主体中存在的任何“字段”属性的特殊处理。for循环添加的floatfield是在元类完成其工作之后添加的,因此无法正确处理。你知道吗</p>
<p>元类删除它找到的所有“Field”属性,并将它们移到一个\u声明的\u fields dict中。你知道吗</p>
<p>因此,看起来我们可以通过将字段直接添加到声明的字段来向类添加字段。你知道吗</p>
<pre><code>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 name in meas_names:
MySerializer._declared_fields[name] = serializers.FloatField(required=False)
</code></pre>