Django rest framework DRF将2个字段序列化为数组

Django 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 ]} 现在,我提出下

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 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]

有关更多信息,请参见此处