Сериализация в 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
}
Вернуться на верх