Как фильтровать по статусу в 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 это не используется.

Вернуться на верх