Django的。 REST框架。重命名SerializerMethodField()

时间:2019-08-30 20:15:08

标签: django django-rest-framework

在django rest框架中,我有一个序列化程序,它从模型中获取字段,将其组合在一个标签下,并以xml显示。一切都很简单。 我了解其运作方式。但是我不了解如何重命名父标记。

我将显示:

#serializers.py

class kvSerializerLivingSpace(serializers.ModelSerializer):
unit = serializers.CharField(default='qm')
    class Meta:
        model = kv
        fields = ['unit', 'value']

class kvSerializer(serializers.ModelSerializer):
living_space = serializers.SerializerMethodField()

    class Meta:
    model = kv
    fields = ['living_space']

    def get_living_space(self, obj):
    return kvSerializerLivingSpace(obj).data

我需要通过连字符living_space。使它看起来像living-space

我知道我可以按以下方式重命名标签:

   def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields.update({
            'living-space': kvSerializerLivingSpace()
        })

但这不适用于serializers.SerializerMethodField()

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试

self.fields.update({
    'living-space': serializers.SerializerMethodField(method_name='get_living_space')
})

您拥有的代码不起作用,因为您使用的是kvSerializerLivingSpace,但没有数据源,因此DRF尝试从具有与序列化器字段({{1} ),但不存在。

如果您真的希望该方法仅序列化整个对象,则不需要它。相反,您可以执行以下操作:

living-space

星号表示整个对象都用作来源。

有关更多信息:https://www.django-rest-framework.org/api-guide/fields/#source