Django rest framework DRF将2个字段序列化为数组
DRF v3.12.4Django rest framework DRF将2个字段序列化为数组,django-rest-framework,Django Rest Framework,DRF v3.12.4 class AModel(models.Model): field_0 = models.CharField() field_1 = models.FloatField() field_2 = models.FloatField() 有这样一个模型,我需要以如下方式序列化它(只读): { "field_0": "FIELD0", "arr": [ 1.0, 2.0 ]} 现在,我提出下
class AModel(models.Model):
field_0 = models.CharField()
field_1 = models.FloatField()
field_2 = models.FloatField()
有这样一个模型,我需要以如下方式序列化它(只读):
{ "field_0": "FIELD0", "arr": [ 1.0, 2.0 ]}
现在,我提出下一个解决方案:
class BSerializer(serializer.Serializer):
def to_representation(self, data):
return [data.field_1, data.field_2]
class ASerilizer(serializers.Serializer):
arr = BSerializer(source='*')
class Meta:
model = AModel
fields = ['field_0', 'arr']
这是可行的,但我也使用了drf,当然,它不能分析重写方法。我正在BSerilizer上尝试@extend\u schema\u序列化程序,但它不起作用
是否可以不重写to_表示方法
因此,问题是,在这种情况下,是否可以在不重写to_表示方法的情况下使用序列化程序,例如ListSerializer?或者有人知道为什么@extend\u schema\u序列化程序不能工作
Thx如果只想将
arr
字段用作只读字段,可以使用序列化程序的SerializerMethodField:-
from rest_framework import serializers
class ASerilizer(serializers.Serializer):
arr = serializers.SerializerMethodField()
class Meta:
model = AModel
fields = ['field_0', 'arr']
def get_arr(self, instance):
return [instance.field_1, instance.field_2]
有关更多信息,请参见此处