在Django REST Framework list_route中使用单个URL进行GET和POST

dkhaupt

DRF中的ModelViewSets确实很有帮助,但是我试图扩展其中的一个,以便能够在GET请求中返回对象列表,并在POST请求中处理列表。到目前为止,似乎我需要使用@list_route装饰器添加此功能。

我已经很好地在其他视图集中添加了自定义路由,但这是我第一次尝试添加一个接受多个方法的路由。这是我到目前为止的内容:

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

我认为这可行并且我的问题出在urls.py这里-这是那里的相关内容:

#bind the pick methods explicitly
update_picks = PickViewset.as_view({'get': 'update_picks'})

url(r'^api/picks/(?P<league>[\w ]+)/(?P<week>[0-9]+)/$', update_picks, name='update_picks')

这适用于GET请求,并且如果我将update_picks定义更改

update_picks = PickViewset.as_view({'get': 'update_picks'})

然后我可以从Viewset进入POST代码。为了将GET和POST请求都路由到update_picks操作上,然后可以使用request方法来区分它们,我该怎么做?

我尝试将, {'post': 'update_picks'}as添加到as_view()中,但这不起作用。

我也尝试添加

get_picks = PickViewset.as_view({'get': 'update_picks'})

使用新的网址格式

url(r'^api/picks/(?P<league>[\w ]+)/(?P<week>[0-9]+)/$', get_picks, name='get_picks'),

但这也不起作用。

我考虑list_routes使用相同的URL进行分隔,但似乎不支持该功能,尽管我可能会错过文档中的某些内容。

谢谢你的帮助!

托马斯·瓦尔奇(Tomas Walch)

actions参数ViewSet是一个dict,所有方法都遵循该dict:

get_picks = PickViewset.as_view({
    'get': 'update_picks',
    'post': 'update_picks',
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章