2016-06-15 5 views
1

Мне нужно обновить поле code с patch в APIView.Django rest framework APIView patch

меня это до сих пор:

class UserDetailView(APIView): 

    def patch(self, request, user_id): 
     user = User.objects.get(id=user_id) 

     serializer = UserSerializerRead(user, data=request.data, partial=True) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(status=HTTP_204_NO_CONTENT) 

     return Response(status=HTTP_400_BAD_REQUEST) 

и запрос будет:

[{"action": "replace", "path": "/code", "value": "2"}] 

я не понимаю, как патч работает, это не меняет code.

Может ли кто-нибудь дать мне код для этого?

+0

патч так же, как но вам не нужно включать весь исходный объект (можно было бы, если хотите). Затем Patch запускает встроенный DRF partial_update, который в основном принимает все ключи и устанавливает для каждого атрибута 'model ['key']' значение, равное новому. Естественно, вы не можете обновить Multicomponent без каких-либо серьезных манипуляций. – Zargold

+0

У вас есть примеры для патча? Я не могу найти в сети. –

ответ

3

PATCH глаголы аналогичны POST или PUT, за исключением того, что они пропускают необходимые поля, если они отсутствуют.

При условии, что UserSerializerRead может обновить экземпляр User, вы запрашиваете бы:

{'code': 2} 

В противном случае, вам придется использовать определенный сериалайзер для разбора action/path/value