Подтвердить что ты не робот

Редактирование объекта сериализатора django-rest-framework перед сохранением

Я хочу отредактировать объект сериализатора django-rest-framwork до его сохранения. Вот как я это делаю сейчас -

def upload(request):
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid(): # All validation rules pass
             obj = form.save(commit=False)
             obj.user_id = 15
             obj.save()

Как я могу сделать это с помощью объекта django-rest-framework serializer?

@api_view(['POST','GET'])
def upload_serializers(request):
    if request.method == 'POST':
         serializer = FilesSerializer(data=request.DATA, files=request.FILES)
         if serializer.is_valid():
              serializer.save()
4b9b3361

Ответ 1

Вы можете отредактировать объект serializer перед сохранением сериализатора:

if serializer.is_valid():
    serializer.object.user_id = 15 # <----- this line
    serializer.save()

Ответ 2

Теперь отредактирован для REST framework 3

С REST framework 3 теперь имеет место шаблон:

if serializer.is_valid():
    serializer.save(user_id=15)

Обратите внимание, что сериализаторы теперь никогда не выставляют экземпляр несохраненного объекта как serializer.object, однако вы можете проверить необработанные проверенные данные как serializer.validated_data.

Если вы используете общие представления и хотите изменить поведение сохранения, вы можете использовать крюки perform_create и/или perform_update...

def perform_create(self, serializer):
    serializer.save(user_id=15)