首页 > 解决方案 > 如何使 DRF 将查询参数传递给操作

问题描述

我正在使用 django-filters 在 django rest 框架中使用过滤。由于我的视图集上的一些@actions 的性质,我需要将过滤器参数传递给这些操作。有没有办法将视图集的当前列表视图的查询参数传递给这些操作?

标签: djangodjango-rest-frameworkdjango-filter

解决方案


我通过覆盖默认的 django-rest-framework 渲染器并更改get_extra_actions方法以使用正确的查询参数反映 url 解决了这个问题。

def get_extra_actions(extra_actions_dict, view):
    query_params = view.request.query_params
    for k, v in extra_actions_dict.items():
        extra_actions_dict[k] = f'{v}?{urlencode(query_params, doseq=True)}'
    return extra_actions_dict


class BrowsableAPIRenderer(RestBrowsableAPIRenderer):
    def get_extra_actions(self, view, status_code):
        extra_actions_dict = super(BrowsableAPIRenderer, self).get_extra_actions(view, status_code)
        return get_extra_actions(extra_actions_dict, view)

推荐阅读