DjangoBackendFilter и фильтрация по идентификатору - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть очень простой фильтр, созданный с использованием DjangoBackendFilter и фильтра Ordering. Он работает со всеми параметрами запроса, такими как? Part_number = 12345, но когда дело доходит до поля id, он вообще не работает, т.е.? Id = 12345.

У меня еще нет фильтров списка, поэтому я не ожидаю, что несколько значений фильтра будут работать. Но я ожидаю, что каждое поле будет работать для ввода одного значения. Кажется странным, что только поле id не работает. Я также попытался использовать? Pk = 12345 в URL API, но он также ничего не фильтрует.

views.py

class PartList(generics.ListAPIView):
    queryset = Part.objects.all()
    serializer_class = PartSerializer
    pagination_class = StandardResultsSetPagination

    filter_fields = '__all__'
    ordering = 'id'

pagers.py

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    max_page_size = 1000

    def get_paginated_response(self, data):
        return Response({
            'links': {
                'next': self.get_next_link(),
                'previous': self.get_previous_link()
            },
            'count': self.page.paginator.count,
            'total_pages': self.page.paginator.num_pages,
            'results': data
        })

serializers.py

class PartSerializer(serializers.ModelSerializer):
    class Meta:
        model = Part
        fields = '__all__'

1 Ответ

0 голосов
/ 12 ноября 2018

Я понял это.

Проблема была с

filter_fields = '__all__'

Эта запись включает в себя идентификатор / pk в сериализаторе, но в фильтре не содержит идентификатор.

Так что я просто заменил его на

filter_fields = [field.name for field in Part._meta.get_fields()]
...