【发布时间】:2016-05-27 20:01:52
【问题描述】:
我有一个带有额外 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 时默认提供的。
【问题讨论】:
-
谢谢 - 我看过这些,因为它们看起来很相似,但是我相信这两个问题更多地涉及如何使用 DRF 序列化多个对象。在我的情况下,如果我发布超过 1 个对象,我什至无法进入提供的代码,因为 JSON 错误在它进入视图集之前返回。第一篇文章使用了 ListCreateAPIView,但我认为它包含的 mixin 已经包含在 ModelViewset 中——但也许我错了。
标签: python django django-rest-framework