Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST框架:接受具有列表路由的多个发布对象_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django REST框架:接受具有列表路由的多个发布对象

Python Django REST框架:接受具有列表路由的多个发布对象,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个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', '

我有一个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
多亏了我前面的回答,此操作可以成功地处理GET请求和POST-但是,当我尝试发布多个对象时,会出现JSON错误:

"detail": "JSON parse error - Extra data: line 90 column 6 - line 181 column 2 (char 3683 - 7375)"
其中指定的位置对应于第一个对象的端点。如何更改
update\u picks
以处理对象列表?此外,如果此请求可能是新对象和更新的现有对象的混合,那么我是否应该使用POST for all,或者只是在每个对象的基础上处理每个POST/PUT


我考虑将CreateModelMixin添加到视图集中,但是它已经可以创建了,但只能创建一个对象。ListCreateAPIView看起来很相似——它没有固有的列表创建,而只是CreateModelMixin和ListModelMixin——我认为这两个都是在使用ModelViewset时默认提供的

我认为您必须覆盖post方法(参见这里的问题),并使用
JSONParser().parse()自己解析json


可能是相关的:谢谢-我已经看了这些,因为它们看起来很相似,但是我相信这两个问题更多地涉及如何用DRF序列化多个对象。在我的例子中,如果我发布了超过1个对象,我甚至无法进入提供的代码,因为JSON错误在进入viewset之前返回。第一篇文章使用了ListCreateAPIView,但是我认为它包含的混音已经包含在ModelViewset中了——但也许我在这一点上错了。但是,有了ModelViewset,文章可以被覆盖吗?DRF文档让人觉得情况并非如此:ViewSet类只是一种基于类的视图,它不提供任何方法处理程序,如.get()或.post(),而是提供了.list()和.create()等操作。我认为这个问题的海报可以,因为他使用了ListCreateApiViews,我认为你可以。但是你能发布完整的回溯来找出错误是在哪里抛出的吗?好吧,这个错误只是在可浏览的API中显示为从发布2个对象返回的JSON——它不是一个带有坏屏幕、完整回溯和局部变量的Django/DRF错误。这让我觉得这是一种路由错误,但我知道它可能会击中更新操作的POST部分-它只是在存在超过2个对象的情况下无法到达那里。我现在不在家,但我可以稍后提供一个屏幕截图。你能发布JSON对象吗?我会对答案进行投票,但我实际上没有覆盖post方法-代码按照我原始问题中的结构工作,我仍然不确定在视图集中覆盖post是否真的有效。我认为如果我接受了一个我实际上没有使用的答案,那将是一种误导,但我非常感谢你的帮助。
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)