我正在使用django-filters在django rest框架中使用过滤。由于我的视图集上某些@action的性质,我需要将filter参数传递给这些动作。有什么方法可以将视图集的当前列表视图的查询参数传递给这些操作?
sarah928 回答:如何使DRF将查询参数传递给操作
我通过覆盖默认的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)