Что такое read_only, поля для чтения и записи и сериализаторы в django rest framework? - PullRequest
0 голосов
/ 18 октября 2018

При записи сериализатора в DRF, например, как показано ниже:

class AlbumSerializer(serializers.ModelSerializer):
  tracks = TrackSerializer(many=True, read_only=True)

  class Meta:
    model = Album
    fields = ('album_name', 'artist', 'tracks')

что здесь делает атрибут read_only?и есть что-то вроде read_only сериализатора, что это?

1 Ответ

0 голосов
/ 19 октября 2018

Атрибут 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()

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

...