![](/img/trans.png)
[英]Django Rest Framework: @detail_route and @list_route with same name
[英]Django REST Framework: accepting multiple POSTed objects with a list_route
我有一个带有额外的list_route
用于处理某些对象列表的GET / POST:
class PickViewset(viewsets.ModelViewSet):
queryset = Pick.objects.all()
serializer_class = PickSerializer
def get_queryset(self):
#gets the correct queryset
@list_route(methods=['get', 'post'])
def update_picks(self, request, league, week, format = None):
if request.method == 'POST':
#process/save objects here
else:
#otherwise return the requested list
多亏了我前面的问题的答案,此操作可以成功处理GET请求以及POST-;但是,当我尝试POST多个对象时,出现JSON错误:
"detail": "JSON parse error - Extra data: line 90 column 6 - line 181 column 2 (char 3683 - 7375)"
指定位置对应于第一个对象的末端。 如何更改update_picks
来处理对象列表? 另外,如果此请求可能是新对象和更新对象的混合,我是否应该对所有对象都使用POST,还是仅基于每个对象处理每个POST / PUT?
我考虑过在视图集上添加一个CreateModelMixin,但是它已经可以创建,但只能创建一个对象。 ListCreateAPIView似乎很相似-它没有固有的列表创建功能,而只有CreateModelMixin和ListModelMixin-我认为在使用ModelViewset时默认提供这两者。
我认为您必须覆盖post方法(请参阅Django Rest Framework Batch Create的问题 ),并使用JSONParser().parse()
自行解析json JSONParser().parse()
def post(self, request, *args, **kwargs):
if request.DATA['batch']:
json = request.DATA['batchData']
stream = StringIO(json)
data = JSONParser().parse(stream)
request._data = data
return super(CharacterDatumList, self).post(request, *args, **kwargs)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.