Я нахожусь в ситуации, когда у меня есть конечная точка samples
, которая представляет модель sample
через ModelViewSet
.
Моя цель состоит в том, чтобы, когда пользователь POST сопоставлял эту конечную точку с данными
как
{
"a":1,
"b":2 ,
"c":3
}
, я хотел иметь возможность переопределить / добавить пары ключ: значение вэта входящая полезная нагрузка хранится в request.data
в методе create
.
Этого нельзя сделать просто путем доступа к request.data
, поскольку это QueryDict
, который является неизменным.
Кроме того, яЯ не могу добиться этого в методе perform_create()
, поскольку данные, которые я могу ввести, критичны к проверке.
В настоящее время я застрял со следующим решением, которое требует от меня ПЕРЕЗАПИСАТЬ полный метод create()
:
class MyViewSet(viewsets.ModelViewSet):
queryset = Sample.objects.all()
serializer_class = MSampleSerializer
name = "samples"
def add_info(self, request):
...
<acquire_info>
...
data = request.data.dict()
data["s"] = <info1>
data["r"] = <info1>
data["t"] = <info1>
return data
def create(self, request, *args, **kwargs):
data = self.add_info(request)
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(
serializer.data, status=status.HTTP_201_CREATED, headers=headers
)
Существует ли общий способ редактирования request.data
перед вызовом любого метода действия, такого как create()
или put()
,?
Если нет 1.);Есть ли другая возможность?
Заранее спасибо.