本质上,我试图找到一种在不创建自定义路由器的情况下将更多视图附加到路由器的好方法。有什么好方法可以做到这一点?
这有点等同于我想要完成的事情。为了这个问题,变量名称已更改,我要介绍的示例方法非常简化。
路由器:
router = routers.SimpleRouter(trailing_slash=False)
router.register(r'myobjects', MyObjectViewSet, base_name='myobjects')
urlpatterns = router.urls
视图集
class MyObjectsViewSet(viewsets.ViewSet):
""" Provides API Methods to manage MyObjects. """
def list(self, request):
""" Returns a list of MyObjects. """
data = get_list_of_myobjects()
return Response(data)
def retrieve(self, request, pk):
""" Returns a single MyObject. """
data = fetch_my_object(pk)
return Response(data)
def destroy(self, request, pk):
""" Deletes a single MyObject. """
fetch_my_object_and_delete(pk)
return Response()
我需要包括的另一种方法类型的一个示例。(其中有很多):
def get_locations(self, request):
""" Returns a list of location objects somehow related to MyObject """
locations = calculate_something()
return Response(locations)
最终结果是以下 URL 可以正常工作并“干净”地实施。
GET example.com/myobjects/123/locations