DRF: в чем разница между полем и сериализатором - PullRequest
0 голосов
/ 21 января 2019

Мы можем использовать сериализатор как поле внутри другого сериализатора.

Интересно, почему в DRF есть класс Field и класс сериализатора?

class CommentSerializer(serializers.Serializer):
    user = UserSerializer()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()

Пример сериализатора взят из документа https://www.django -rest-framework.org / api-guide / serializers /

Как видите, UserSerializer очень похож на Field.Мне просто любопытно, почему у них есть сериализатор и полевой класс отдельно ..

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Serilaizer - это поле в DRF. Сериализаторы могут быть вложенными, поэтому их можно использовать в качестве поля в других сериализаторах. И да, если вы проверите исходный код, BaseSerializer является подклассом Field, так как сериализатор - это просто особый случай поля.

0 голосов
/ 21 января 2019

На мой взгляд:

В django rest framwork вы можете думать Serializer как маска. Он охватывает ваши исходные данные и изменить его на что угодно. Например, отформатируйте ваши json данные или подтвердите, что ваши входные данные имеют правильный формат или нет.

В вашем примере,

content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()

Comment имеют 2 типа прямого поля CharField и DateTimeField.

user = UserSerializer()

Comment имеет тип поля UserSerializer. Это отличается Serializer, и django знают, что ваши CommentSerializer будут связаны с UserSerializer. И все, что определено в UserSerializer, будет использоваться здесь, для формата вывода json или проверки. И с определением этого nested objects ваш вывод json будет иметь больше данных, таких как

'user': {'email': 'foobar', 'username': 'doe'}

И если вы хотите создать Comment с одним user, вы должны передать все validate define в UserSerializer.

Заключение: в этом примере

  • Field class использовать для прямого поля.
  • Serializer class для связи с другим классом
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...