我有一个使用DjangoBackendFilter和Ordering过滤器制作的非常简单的过滤器。它适用于所有查询参数,例如?part_number = 12345,但当涉及id字段时,它根本不起作用,即?id = 12345。
我还没有任何列表过滤器,因此我不希望使用多个过滤器值。但我确实希望每个字段都可用于单值输入。似乎很奇怪,只有id字段不起作用。我也尝试过在API URL中使用?pk = 12345,但它也不过滤任何内容。
class PartList(generics.ListAPIView):
queryset = Part.objects.all()
serializer_class = PartSerializer
pagination_class = StandardResultsSetPagination
filter_fields = '__all__'
ordering = 'id'
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
})
class PartSerializer(serializers.ModelSerializer):
class Meta:
model = Part
fields = '__all__'
答案 0 :(得分:0)
我知道了。
问题出在
filter_fields = '__all__'
此符号在序列化程序中包含id / pk,但在过滤器中不包含id。
所以我只用
替换了它filter_fields = [field.name for field in Part._meta.get_fields()]