Сериализация в Django Rest Framework
В Django Rest Framework. У меня есть программа, которая позволяет пользователю вводить некоторые данные. Я сериализую этот ввод, но с этим вводом я также сохраняю его в другой модели и создаю для него некоторые значения по умолчанию и возвращаю их пользователю. Но я немного запутался, нужно ли мне сериализовать и эту модель.
class FileExample(APIView):
def post(self, request, format=None):
serializer = FileExampleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
other_model = OtherModel(name=request.FILES['file'].name, type_obj='file')
other_model.save()
return Response({'url': other_model.url}, status=status.HTTP_201_CREATED)
Например, OtherModel
- это мой другой объект модели, который я создаю, который создает некоторые значения по умолчанию. Но я рассматривал вложенные сериализаторы, но это не достигало того, что я хотел, так как выдавало ошибку, что отсутствует необходимое значение. Мой вопрос заключается в том, что мой код будет работать так, но должен ли я также сериализовать OtherModel
?
Вы используете сериализатор для создания, обновления и отображения данных.
Например, если вы используете FileExampleSerializer(data=request.data)
def post(self, request, format=None):
serializer = FileExampleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
data = serializer.data
else:
data = serialiyer.errors
return Response(data=data, status=status.HTTP_201_CREATED)
вы создаете новую запись в вашей базе данных. save()
вызываете метод create()
в вашем сериализаторе.
Например, если вы используете FileExampleSerializer(data=request.data, instance=OtherModel.object.get(id=1)))
def put(self, request, format=None):
instance=OtherModel.object.get(id=1)
serializer = FileExampleSerializer(data=request.data, instance=instance)
if serializer.is_valid():
serializer.save()
data = serializer.data
else:
data = serialiyer.errors
return Response(data=data, status=204)
ваш сериализатор обнаруживает, что вы хотите обновить значения instance
. save()
вызывает update()
в вашем сериализаторе и возвращает обновленный экземпляр.
is_valid()
проверяет, имеют ли входящие данные правильный формат и все ли ключи присутствуют.
Если вы хотите изменить поведение отображения данных, вы можете переопределить to_representation()
. Например, ваши вложенные данные должны отображаться вместо
{
"foo": "bar",
"alice": [
"john": 1,
"bob": 2
]
}
туда
{
"foo": "bar",
"john": 1,
"bob": 2
}