Пользовательский сериализатор для 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.

Вернуться на верх