簡體   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