ViewSetのカスタムアクションを定義しました
from rest_framework import viewsets
class UserViewSet(viewsets.ModelViewSet):
@action(methods=['get'], detail=False, permission_classes=[permissions.AllowAny])
def gender(self, request):
....
そして、ビューセットは従来の方法でURLに登録されます
from Django.conf.urls import url, include
from rest_framework import routers
from api import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet, base_name='myuser')
urlpatterns = [
url(r'^', include(router.urls)),
]
URL /api/users/gender/
は機能します。しかし、ユニットテストでreverse
を使用して取得する方法がわかりません。 (確かにこのURLをハードコーディングできますが、コードから取得するのは良いことです)
Django documentation によると、次のコードが機能するはずです
reverse('admin:app_list', kwargs={'app_label': 'auth'})
# '/admin/auth/'
しかし、私は次のことを試しましたが、動作しません
reverse('myuser-list', kwargs={'app_label':'gender'})
# errors out
reverse('myuser-list', args=('gender',))
# '/api/users.gender'
Django-restframework documentation には、reverse_action
という関数があります。しかし、私の試みはうまくいきませんでした
from api.views import UserViewSet
a = UserViewSet()
a.reverse_action('gender') # error out
from Django.http import HttpRequest
req = HttpRequest()
req.method = 'GET'
a.reverse_action('gender', request=req) # still error out
そのアクションのURLを逆にする適切な方法は何ですか?