Пользовательский сериализатор для Django Rest Framework
Я ищу решение для создания сериализатора / конечной точки API для представления данных в пользовательском порядке. При добавлении сериализаторов и наборов представлений в DRF я получаю только поля, связанные с данной моделью. Но мне хотелось бы иметь пользовательскую структуру всех моих моделей вместе. В качестве примера:
У меня есть модель под названием сезон, модель под названием вечер и модель под названием события. Теперь я хотел бы иметь конечную точку API, чтобы иметь все это вместе, например, так:
{
"requestTime": "2021-11-09 08:20",
"requestURL": "/all",
"requestMethod": "GET",
"responseCode": 200,
"season": "2021/2022",
"evenings": [
{
"evevning_id": 0,
"day": "",
"date": "2021-11-11",
"event_count": 2,
"events": [
{},
{}
]
}
]
}
Для структуры данных в моделях у меня есть несколько ForeignKeys, например:
season
|
evening
|
event
Есть предложения, как этого добиться?
Используйте вложенный сериализатор (Сезон > Вечер > Событие) подобно этому.
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = models.Event
fields = ['id',...]
class EveningSerializer(serializers.ModelSerializer):
events = EventSerializer(many=True)
class Meta:
model = models.Evening
fields = ['id', 'day', 'date','events',...]
class SeasonSerializer(serializers.ModelSerializer):
evenings = EveningSerializer(many=True)
class Meta:
model = models.Season
fields = ['id', 'season', 'evenings',...]
убедитесь, что при выборке сезона из базы данных используется prefetch relatedв queryset.