2017-09-28 37 views
-1

我在測試應用程序。有必要測試處理來自地址'http://127.0.0.1:8000/api/v1/test/api_address/'的請求的方法。告訴我,請通過反向()的詳細地址給客戶從urls.py獲取路線時出錯

class MyTestCase(APITestCase): 

    def setUp(self): 
     self.message = { 
      'username': 'user_name', 
      'password': 'user_password', 
     } 

    def test_get_token(self): 
     response = self.client.post(reverse('api_address'), self.message) 
     self.assertEqual(response.status_code, status.HTTP_201_CREATED) 

代碼urls.py

users_router = DefaultRouter() 
users_router.register(r'test', TestViewSet, 'test') 
users_router.register(r'test/api_address', APIAddressRequestSet, 'api_address') 

當前實現,反向(「地圖地址」)不工作,一個錯誤掉落:

django.urls.exceptions.NoReverseMatch: Reverse for 'api_address' not found. 'api_address' is not a valid view function or pattern name. 
+2

如果你得到一個錯誤,你應該張貼整個事情。 –

回答

3

DefaultRouter的URL名稱是自動生成的,檢查the docs

設置一個base_name第一:

# urls.py  
users_router = DefaultRouter() 
users_router.register(r'test', TestViewSet, base_name='test') 
users_router.register(r'test/api_address', APIAddressRequestSet, 
         base_name='api_address') 

現在你的URL是反向訪問通過reverse('test-list')reverse('test-detail')等檢查表中的文檔的其他名稱。

你更新的測試:

class MyTestCase(APITestCase): 

    def setUp(self): 
     self.message = { 
      'username': 'user_name', 
      'password': 'user_password', 
     } 

    def test_get_token(self): 
     # note the appended `-list` to the url name 
     response = self.client.post(reverse('api_address-list'), self.message) 
     self.assertEqual(response.status_code, status.HTTP_201_CREATED) 
+0

不幸的是,這並沒有幫助:'django.urls.exceptions.NoReverseMatch:未找到'api_address'的反向。 'api_address'不是有效的視圖函數或模式名稱.' –

+1

請閱讀[文檔](http://www.django-rest-framework.org/api-guide/routers/)。 'DefaultRouter'會將'-list'和'-detail'附加到你的url名稱。我用你的測試更新了我的答案。 – olieidel