DjangoBackendFilter和ID过滤

时间:2018-11-10 09:19:50

标签: django django-rest-framework

我有一个使用DjangoBackendFilter和Ordering过滤器制作的非常简单的过滤器。它适用于所有查询参数,例如?part_number = 12345,但当涉及id字段时,它根本不起作用,即?id = 12345。

我还没有任何列表过滤器,因此我不希望使用多个过滤器值。但我确实希望每个字段都可用于单值输入。似乎很奇怪,只有id字段不起作用。我也尝试过在API URL中使用?pk = 12345,但它也不过滤任何内容。

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 :(得分:0)

我知道了。

问题出在

filter_fields = '__all__'

此符号在序列化程序中包含id / pk,但在过滤器中不包含id。

所以我只用

替换了它
filter_fields = [field.name for field in Part._meta.get_fields()]