【发布时间】:2016-05-27 04:20:20
【问题描述】:
DRF 中的 ModelViewSet 非常有用,但我正在尝试扩展其中一个,以便能够在 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 操作,然后可以通过请求方法区分它们?
我尝试在 as_view() 中添加 , {'post': 'update_picks'},但这不起作用。
我也试过添加
get_picks = PickViewset.as_view({'get': 'update_picks'})
使用新的网址格式
url(r'^api/picks/(?P<league>[\w ]+)/(?P<week>[0-9]+)/$', get_picks, name='get_picks'),
但这也没有用。
我曾考虑使用相同的 URL 单独使用 list_routes,但这似乎不受支持,尽管我可能遗漏了文档中的某些内容。
感谢您的帮助!
【问题讨论】:
标签: python django django-rest-framework