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