从ViewSet(drf)获取所有动作名称

时间:2019-11-21 13:54:52

标签: django django-rest-framework

是否有可能从DRF中的ViewSet获取所有动作名称?
我的意思不仅是标准的listretrieve等,还有自定义的(由@action装饰器定义)
我尝试使用action_map,但它是空的

2 个答案:

答案 0 :(得分:2)

我认为没有直接的方法来获取ViewSet类中指定的所有操作。但是,Routers通常以类似的方式生成URL。因此,我将在这里使用DRF Routers

from rest_framework.routers import SimpleRouter

router = SimpleRouter()
routes = router.get_routes(YourViewsetClass)
action_list = []
for route in routes:
    action_list += list(route.mapping.values())
distinct_action_list = set(action_list)

答案 1 :(得分:0)

我正在使用 rest_framework version 3.11.2,您可以这样做:

actions = [action for action in YourViewsetClass.get_extra_actions()]
action_names = [action.__name__ for action in YourViewsetClass.get_extra_actions()]
action_url_names = [action.url_name for action in YourViewsetClass.get_extra_actions()]