На мой взгляд:
В 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
для связи с другим классом