Skip to content

Viewset.get_extra_action_url_map does not recognize namespaces #7500

Closed
@backbohne

Description

@backbohne

Seems Viewsets get_extra_action_url_map method does not recognize namespaces. I'm using different apps via Django URL namespaces (":") but the DRF action pull down menu will not be provides. My quick fix looks like:

    def get_extra_action_url_map(self):
        action_urls = OrderedDict()

        # exit early if `detail` has not been provided
        if self.detail is None:
            return action_urls

        # filter for the relevant extra actions
        actions = [
            action for action in self.get_extra_actions()
            if action.detail == self.detail
        ]
        for action in actions:
            try:
                url_name = '%s-%s' % (self.basename, action.url_name)
                namespace = self.request.resolver_match.namespace
                if namespace:
                    url_name = '%s:%s' % (namespace, url_name)
                url = reverse(url_name, self.args, self.kwargs,
                              request=self.request)
                view = self.__class__(**action.kwargs)
                action_urls[view.get_view_name()] = url
            except NoReverseMatch as exc:
                pass  # URL requires additional arguments, ignore

        return action_urls

which basically add these two lines:

                namespace = self.request.resolver_match.namespace
                if namespace:
                    url_name = '%s:%s' % (namespace, url_name)

The fix works fine for me since years, but it seems that nobody else has been stumbled about it before.

Regards
Frank

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions