Как фильтровать по статусу в Django Rest Framework с помощью квадратных скобок в параметрах запроса
Я столкнулся с проблемой фильтрации модели по статусу в Django Rest Framework. Вот моя текущая настройка:
Когда я фильтрую с помощью status=1,14, он работает отлично:
class DepartmentFilter(filters.FilterSet):
search = filters.CharFilter(method='filter_search')
status = filters.CharFilter(method='filter_status')
class Meta:
model = Department
fields = ['search', 'status']
def filter_search(self, queryset, name, value):
print("filter_search", value)
return queryset.filter(Q(token__icontains=value))
def filter_status(self, queryset, name, value):
print("filter_status", value) # Verificar que el filtre s'executa
if value:
status_values = value.split(',')
return queryset.filter(status__id__in=status_values)
return queryset
Однако у меня возникают проблемы с перехватом параметра запроса, когда я использую status[]=1,14.
Я безуспешно пытался сделать следующее:
status = filters.CharFilter(method='filter_status[]')
status = filters.CharFilter(method='filter_status%5B%5D')
Похоже, нет способа создать функцию, которая бы это фиксировала.
Разрешение status[] - это первый шаг, потому что в конечном итоге я хочу работать с вызовом filters[status][] = 1,14. Я не нашел способа справиться с этим.
Может ли кто-нибудь подсказать?
Спасибо!
Нужно изменить не метод, а имя "источника", поэтому:
class DepartmentFilter(filters.FilterSet):
search = filters.CharFilter(method='filter_search')
status = filters.CharFilter(method='filter_status', field_name='status[]')
class Meta:
model = Department
fields = ['search', 'status']
def filter_search(self, queryset, name, value):
return queryset.filter(Q(token__icontains=value))
def filter_status(self, queryset, name, value):
if value:
status_values = value.split(',')
return queryset.filter(status__id__in=status_values)
return queryset
При этом добавление []
к имени поля - это пережиток PHP, в (большинстве) приложений Django это не используется.