我认为,通常情况下,下面的代码会将floatfields添加为类的属性。
注意for循环在类之后,而不是在其主体中。
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))
然而serializer.serializer有一个元类,它包含对类主体中存在的任何“field”属性的特殊处理。for循环添加的floatfields是在元类完成其工作后添加的,因此无法正确处理。
元类删除它找到的任何“field”属性,并将它们移到声明的字段dict中。
因此,看起来我们可以通过直接将字段添加到声明的字段来将字段添加到类中。
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)