Использовать данные в качестве имени поля ответа Django?

У меня есть следующий класс данных:

class IndustryScore:
    industry: str
    score: Decimal

class Foo:
    ...
    industry_scores = List[IndustryScore]

Я хочу, чтобы ответ был чем-то, где ключ ответа - отрасль, а оценка - значение. Например:

{
    "automotive": 5.1,
    "construction": 10.0,
    "technology": 8.6,
}

Сейчас у меня есть сериализатор следующего вида:

class IndustryScoreSerializer(serializers.Serializer):
    industry = serializers.Charfield()
    score = serializers.DecimalField()

но вместо этого в ответ приходит что-то вроде этого:

[
    {
        industry: "automotive",
        score: 5.1
    }
]

Как я могу изменить сериализатор, чтобы получить ожидаемую структуру JSON?

Ответ правильный, он находится в массиве, так что вы можете зациклить его, так что все работает нормально,

но если вы настаиваете, вы можете сделать ответ как ваш пример, только не используйте сериализатор, а создайте словарь и добавьте значения в него, что приведет к ошибкам во фронтенде, потому что ключи будут меняться.

Размещаю здесь свой ответ, поскольку я нашел альтернативный метод. Используя serializers.SerializerMethodField, вы можете сделать следующее без необходимости создавать IndustryScoreSerializer:

class FooSerializer:
    industry_scores = serializers.SerializerMethodField()

    def get_industry_scores(self, data):
        return {score.industry: score.score for score in data.industry_scores}
Вернуться на верх