web-dev-qa-db-ja.com

Django Rest FrameworkでテストするときにルーターのURL名を取得する

何か問題があります。 Django Rest Frameworkでルーターを使用しており、いくつかのAPIメソッドをテストしたいと思っています。

rls.pyで:

router = DefaultRouter()
router.register(r'my-list', MyViewSet, base_name="my_list")

urlpatterns = [
    url(r'^api/', include(router.urls,
                          namespace='api'), ),

]

したがって、tests.pyでは、reverseのようなものを使用したいと思います。今私は

response = self.client.get('/api/my-list/')

ハードコードされた文字列です。

response = self.client.get(reverse('api:my_list')

エラーが発生しました:

Django.core.urlresolvers.NoReverseMatch: Reverse for 'my_list' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

それを修正するには?

ありがとう!

25
tim

DRFは、さまざまなURL(リスト、詳細、場合によってはカスタムURL)のビューセットにサフィックスを追加します。 ソースコードdocs で確認できます。したがって、あなたの場合、実際の逆は次のようになります:

reverse('api:my_list-list')    # for list URL. e.g. /api/my-list/
reverse('api:my_list-detail')  # for detail URL. e.g. /api/my-list/<pk>/

そのため、おそらくリソース名をルーターとして使用する方がよいでしょうbase_name。例えば ​​base_name='user'base_name='users_list'

48
miki725