Атрибут read_only
означает, что поле TrackSerializer
будет использоваться только для визуализации дополнительных данных при сериализации экземпляра (например, вызывается serializer.data
или serializer.get_representation()
), однако, когда этот сериализатор используется для созданияAlbum
экземпляр из некоторых данных не будет ожидать, что входящие данные будут содержать поле tracks
.
При сериализации вашей модели:
album = Album.objects.first()
serializer = AlbumSerializer(instance=album)
data = serializer.data # This will include the "tracks" field
data
должен содержать все три поля, "имя_альбома", "исполнитель" и "дорожки".
При создании или обновлении модели не следует включать в данные поле "дорожки", поскольку это поле доступно только для чтения.
album_data = {
"album_name": "My Album",
"artist": "My Artist"
}
serializer = AlbumSerializer(data=data)
serializer.is_valid()
serializer.save()
Сериализатор только для чтения работает только путем передачи экземпляра в сериализатор и рендеринга этого экземпляра.Вы не можете передать данные, чтобы попытаться создать экземпляр, используя сериализатор только для чтения.