我有一个带有额外list_route
的ModelViewSet来处理特定对象列表的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
感谢我之前question的答案,此操作可以成功处理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添加到Viewset,但它已经可以创建 - 但只是一个对象。 ListCreateAPIView似乎是相似的 - 它没有固有的列表创建,而只是CreateModelMixin和ListModelMixin-我认为在使用ModelViewset时默认提供这两者。
答案 0 :(得分:1)
我认为您必须覆盖post方法(请参阅此处的问题https://api.instagram.com/v1/media/)并使用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)