我的情况是,我有一个端点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()
or )之前是否有一种通用的方法来编辑put()
?如果不是 1.); 有不同的可能性吗?
提前致谢。