У меня есть некоторые проблемы с этим решением
Поэтому я немного его изменил:
class ListFilter(Filter):
def __init__(self, query_param, *args, **kwargs):
super(ListFilter, self).__init__(*args, **kwargs)
# url = /api/cities/?id=1&id=2&id=3 or /api/cities/?id=1,2,3
# or /api/cities/?id=1&id=2&id=3?id=4,5,6
self.query_param = query_param
self.lookup_expr = 'in'
def filter(self, queryset, value):
try:
request = self.parent.request
except AttributeError:
return None
values = set()
query_list = request.GET.getlist(self.query_param)
for v in query_list:
values = values.union(set(v.split(',')))
values = set(map(int, values))
return super(ListFilter, self).filter(queryset, values)
class CityFilter(filterset.FilterSet):
id = ListFilter(field_name='id', query_param='id')
name = filters.CharFilter(field_name='name', lookup_expr='icontains')
class Meta:
model = City
fields = ['name']
Если вы хотите использовать имя параметра пользовательского запроса- изменить query_param
аргумент