Использовать данные в качестве имени поля ответа 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}