Использование .to_representation() и .to_internal_value в django-rest-framework?

Что делают .to_representation() и .to_internal_value в serializers?
Если я передаю данные в сериализатор, данные сначала бросаются to_representation()?
Какое использование этих двух?

Ответ 1

  Если вы хотите создать настраиваемое поле, вам нужно создать подкласс а затем переопределить один или оба из .to_representation() и .to_internal_value() методы. Эти два метода используются для преобразования между исходным типом данных и примитивным сериализуемым типом данных. Примитивные типы данных, как правило, будут любыми из числа, строки, логическое значение, дата/время/дата/время или нет. Они также могут быть любым списком или словарь, как объект, который содержит только другие примитивные объекты. Другие типы могут поддерживаться, в зависимости от того, какой вы используете используя.

Метод .to_representation() вызывается для преобразования начального тип данных в примитивный, сериализуемый тип данных.

Метод to_internal_value() вызывается для восстановления примитива. Тип данных во внутреннем представлении Python. Этот метод должен поднять serializers.ValidationError, если данные недействительны.

Обратите внимание, что класс WritableField, который присутствовал в версии 2.x нет дольше существует. Вы должны создать подкласс Field и переопределить to_internal_value(), если поле поддерживает ввод данных.

Ref:

  1. http://www.django-rest-framework.org/api-guide/fields/#custom-fields
  2. https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L417