2

こんにちは、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"
        }
    ],

ご覧のとおり、この結果では、フィールドの名前がそのフィールドの値の横に dict キーとして表示されます。しかし、私は別の構造を持ちたいと思っています。次のように:

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

この例は、キーと値のペアを示しています。ここで、キーは言語フィールドの値であり、dict の値は翻訳されたフィールドの値です。

フィールド名なしで「翻訳済み」フィールドを持つ「言語」フィールドの値のペアのみを表示するにはどうすればよいですか?

4

2 に答える 2

9

リストシリアライザをカスタマイズすることで実装できます:

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
于 2015-07-24T08:54:53.260 に答える