Невозможно заставить вложенные сериализаторы показывать связанные данные с помощью фреймворка Django REST

По какой-то причине мои вложенные сериализаторы не отображают связанные данные. Я искал ответ в Интернете, но не смог найти ни одного ответа, который бы исправил эту проблему. Демо-приложения, которые я делаю с помощью вложенных сериализаторов, работают как ожидалось, но в моем основном приложении вложенные сериализаторы не отображают связанные данные.

Ниже приведен мой соответствующий код.

Вот что я получаю в json-ответе.

[
    {
        "id": 2,
        "nickname": "My Favorite Restaurant",
        "user": 2,
        "location": 2
    }
]

Из-за чего вложенные сериализаторы не отображаются должным образом?

Огромное спасибо за помощь.

Я создал демо-приложения, использующие вложенные сериализаторы, с успехом, но попытка воспроизвести это на моем основном приложении не работает. Я могу видеть внешние ключи в json-ответе, а опция "depth" показывает, что данные есть и модели настроены правильно. Я также пробовал добавить 'related_name' в свою модель, но безрезультатно.

Проблема связана с тем, как вы используете вложенную сериализацию. Поэтому вам следует изменить код внутри класса FavoriteLocationSerializer следующим образом:

class FavoriteLocationSerializer(serializers.ModelSerializer):
    location_details = LocationSerializer(source='location')
    class Meta:
        model = FavoriteLocation
        fields = ['id', 'nickname', 'user', 'location', 'location_details']
  1. Тип поля location - ForeignKey, которое представляет собой отношение многие-к-одному, в то время как вы добавляете флаг many=True, который должен использоваться, если поле используется для представления отношения многие-ко-многим. (документация DDRF)

  2. Прочитайте документ Django о related_name, чтобы понять его использование.

  3. Нет необходимости устанавливать read_only=True, потому что по умолчанию вложенные сериализаторы доступны только для чтения. ( документация DDRF)

  4. Вы должны использовать атрибут source, когда имя элемента, который вы хотите сериализовать, не совпадает с его именем внутри сериализатора модели.

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