Skip to main content
 首页 » 编程设计

python之Django Rest Framework 自定义字段只有一对值(没有字段名作为字典键)

2025年05月04日30开发

您好,我只想在 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',...) 

结果如下:

"translates": [ 
        { 
            "language": "EN", 
            "translated_term": "Chair" 
        } 
        { 
            "language": "IT", 
            "translated_term": "asd" 
        } 
    ], 

如您所见,此结果将字段名称显示为该字段值旁边的字典键。 但我想有一个不同的结构。像下面这样:

    "translates": [ 
        { 
            "EN": "Chair", "IT":"asd" 
        } 
    ], 

此示例显示一对键/值,其中键是语言字段值,dict 的值是已翻译字段的值。

如何在没有字段名称的情况下仅显示“语言”字段和“已翻译”字段的一对值?

请您参考如下方法:

您可以通过自定义 list serializer 来实现它:

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