如何使DRF将查询参数传递给操作

时间:2019-11-05 16:40:48

标签: django django-rest-framework django-filter

我正在使用django-filters在django rest框架中使用过滤。由于我的视图集上某些@action的性质,我需要将filter参数传递给这些动作。有什么方法可以将视图集的当前列表视图的查询参数传递给这些操作?

1 个答案:

答案 0 :(得分:0)

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

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)