Фильтр с несколькими значениями в запросе на получение с помощью django-фильтров с использованием MethodFilter

Я пытаюсь создать FilterSet с набором фильтров с помощью MethodFilter, ожидая несколько таких значений:

Фильтры.py

class MyFilter(django_filters.FilterSet):
    first_filter = django_filters.MethodFilter()

    class Meta:
        model = myModel
        fields = ['first_filter']

    def filter_first_filter(self, queryset, value):
        # I expect value to setup with an array of values
        myquery = Q()
        return queryset.filter(myquery)

Views.py

class MyView(RetrieveAPIView):

    def get(self, request, format=None, **kwargs):
        filter = MyFilter(request.query_params, queryset=myModel.objects.all())
        # Other things go there using the filter instanciated

Поэтому, когда я запрашиваю представление с таким URL-адресом /my_view?first_filter=thing1&first_filter=thing2, в значении метода filter_first_filter передается только вещь 2 вместо ['thing1', 'thing2].

Как изменить это поведение?


person Juanwolf    schedule 19.11.2015    source источник
comment
Попробуйте выполнить отладку, как я сделал с пакетом pdb.   -  person Louis Barranqueiro    schedule 19.11.2015
comment
Отвечает ли это на ваш вопрос? Как вы используете django -filter package со списком параметров?   -  person Josh Correia    schedule 30.06.2021


Ответы (1)


Я только что понял, почему это не работает.

Факт создания экземпляра FilterSet с request.query_params был неверным, поскольку query_params является QueryDict, а функция получения QueryDict возвращает только последний элемент. Итак, чтобы решить проблему, я должен сделать:

class MyView(RetrieveAPIView):

    def get(self, request, format=None, **kwargs):
        dict_params = dict(request.query_params.iterlists())
        filter = MyFilter(dict_params, queryset=myModel.objects.all())
person Juanwolf    schedule 20.11.2015