ePa*_*oal 1 python django django-serializer django-rest-framework
嗨,我想只提供一对没有REST服务键的值:
看看我的serializers.py:
class TranslationSerializer(serializers.ModelSerializer):
translated_term = serializers.CharField(read_only=True)
class Meta:
model = Translation
fields = ('language','translated_term')
class VocabSerializer(serializers.ModelSerializer):
...
translates = TranslationSerializer(many=True, read_only=True)
...
class Meta:
model = Vocab
fields = ( ..., 'translates',...)
Run Code Online (Sandbox Code Playgroud)
结果如下:
"translates": [
{
"language": "EN",
"translated_term": "Chair"
}
{
"language": "IT",
"translated_term": "asd"
}
],
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,此结果将该字段的名称显示为该字段值旁边的dict键.但我希望有一个不同的结构.如下:
"translates": [
{
"EN": "Chair", "IT":"asd"
}
],
Run Code Online (Sandbox Code Playgroud)
此示例显示了一对键/值,其中key是语言字段值,dict的值是已翻译字段的值.
如何只显示"语言"字段的值与"已翻译"字段而没有字段名称?
您可以通过自定义列表序列化程序来实现它:
class TranslationListSerializer(serializers.ListSerializer):
def to_representation(self, data):
r = super().to_representation(data)
return { item['language']: item['translated_term'] for item in r }
class TranslationSerializer(serializers.ModelSerializer):
translated_term = serializers.CharField(read_only=True)
class Meta:
model = Translation
fields = ('language','translated_term')
list_serializer_class = TranslationListSerializer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1065 次 |
| 最近记录: |