如何在Django-rest-framework视图集上允许复杂的URL

时间:2015-01-16 13:37:06

标签: python django rest django-rest-framework

我有一个Scheme视图集,其中包含一个名为optimize的详细路径。定义如下:

@detail_route(methods=['get’])        
def optimize(self, request, pk=None):
    pass

我正在使用DefaultRouter()生成网址,最终为/schemes/:id/optimize。我希望在我的视图集上有第二个方法,在特定位置运行优化,因此网址可能看起来像/schemes/:id/optimize_by_location/:id

如何在我的视图中设置此功能,其中路线有2个级别?

1 个答案:

答案 0 :(得分:1)

我认为使用默认路由器是不可能的。所以你应该:

  • implement a custom router(或使用第三方套餐)
  • 或手动注册您的/schemes/:id/optimize_by_location/:id网址(可能更简单但不那么通用):

有关这方面的更多信息,请参阅django rest tutorial:Binding ViewSets to URLs explicitly

    from django.conf.urls import patterns, url
    from .views import MyViewSet

    optimize_view = MyViewSet.as_view({'get': 'optimize_specific_location'},)
    urlpatterns = [
        url(r'^schemes/(?P<id>[0-9]+)/optimize_by_location/(?P<loc_id>[0-9]+)/$',
            optimize_view),
    ]