在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()
谢谢!
答案 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