我已經爲我的應用程序構建了一些Django-Rest-Framework API。這些API執行諸如模型實例的返回列表之類的事情,並返回有多少模型符合預定標準的計數。如何構建一個從URL中提取多個參數的Django REST路由?
這裏是我的視圖集的樣子:
class MyObjectsViewSet(viewsets.ViewSet):
def retrieve(self,request,pk=None):
queryset = ## Do something here to return a list of myObjects
serializer = MyObjectsSerializer(queryset) ## MyObjectsSerializer not shown here.
return Response(serializer.data,status=status.HTTP_200_OK)
這裏是我的urls.py看起來像這個端點:
router = routers.DefaultRouter()
router.register(r'myObjects', views.myObjectsViewSet, base_name="myObjects")
urlpatterns = patterns('',
...
url(r'^api/', include(router.urls)),
...
)
上面的代碼讓我接單參數添加到API中,並將其用作MyObjectsViewSet.retrieve()中的pk參數。所以當我將瀏覽器指向/ api/MyObjects/60 /時,使用pk == 60調用retrieve()。很好。一切都很棒。
但現在我需要一個API來做更多的事情。我需要一個接受兩個數字參數(「pk」和「otherArg」)並用這兩個參數調用另一個viewSet(MyObjectsNewView)的API。因此,當我將瀏覽器指向/ api/MyObjects/60/59 /時,MyObjectsNewView.retrieve()將以參數pk == 60和其他Arg == 59來調用。
如何在url中設計我的路線.py和我的Viewset使這個工作?
在其他情況下,當我設計非REST URL時,我使用了正則表達式並使用這樣的表示法來指定來自URL字符串的提取參數:(?P<MyObjectID>\d+)
。
看來我應該可以在這裏做同樣的事情。然而,它會自動接受pk參數,而無需在路徑中的任何位置指定它,所以現在我很困惑如何在第一個pk參數sorta在沒有任何正則表達式模式的情況下出現時,爲此路線添加另一個參數。