我正在使用带有django_elasticsearch_dsl库的DRF的ElasticSearch。 我想将一个过滤器参数替换为多个参数。例如:
/search/user/?for_message=true
成为:
/search/user/?is_available=true&id__in=1__2__3
我试图重写Filter_queryset函数,但是在FilteringFilterBackend类复制request.query_params上使用get_filter_query_params函数,所以我无法访问它。
这是我尝试的方式:
def filter_queryset(self, queryset):
if 'for_message' in self.request.query_params.keys():
mutated = self.request.query_params.copy()
mutated.pop('for_message')
mutated['is_available'] = 'true'
mutated['id__in'] = "__".join(
[str(x) for x in list(MyModel.objects.filter(user=self.request.user).values_list('pk', flat=True))])
self._request.GET = mutated
return super().filter_queryset(queryset)