繁体   English   中英

Django REST框架:使用list_route接受多个POSTed对象

[英]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 Ba​​tch 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM