Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DRF-分页响应-附加所有ID的列表_Python_Django_Django Rest Framework_Django Queryset - Fatal编程技术网

Python DRF-分页响应-附加所有ID的列表

Python DRF-分页响应-附加所有ID的列表,python,django,django-rest-framework,django-queryset,Python,Django,Django Rest Framework,Django Queryset,我的网站上有“下一个对象”功能,但我使用分页。我想添加“id”字段,该字段包含过滤和分类到分页响应中的所有对象的id 我尝试的所有操作都只返回当前页面ID的列表 class StandardResultsSetPagination(PageNumberPagination): page_size = 20 page_size_query_param = 'page_size' max_page_size = 20 def get_paginated_respo

我的网站上有“下一个对象”功能,但我使用分页。我想添加“id”字段,该字段包含过滤和分类到分页响应中的所有对象的id

我尝试的所有操作都只返回当前页面ID的列表

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 20
    page_size_query_param = 'page_size'
    max_page_size = 20


    def get_paginated_response(self, data, list_of_ids):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('next', self.get_next_link()),
            ('previous', self.get_previous_link()),
            ('results', data),
            ('ids', list_of_ids)
        ]))

    


class RealestateViewSet(ModelViewSet):
    ...
    pagination_class = StandardResultsSetPagination

    def get_paginated_response(self, data, list_of_ids):
        """
        Return a paginated style `Response` object for the given output data.
        """
        assert self.paginator is not None
        return self.paginator.get_paginated_response(data, list_of_ids)

    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data, list(queryset.values_list('id', flat=True)))

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
这将返回一个包含20个ID的列表,而不是所有过滤对象ID


你知道怎么做吗?

你可以通过提供ID,然后将子类附加到
ModelViewSet.filter\u backends
子类
BaseFilterBackend
来过滤查询集(来自
get\u queryset()

您的
id
在您的问题中来自何处并不清楚(来自URL参数?例如
http://your_url?param1=value1
),但一个简单的例子可能是:

来自rest\u framework.filters导入BaseFilterBackend
类别限制设置过滤器(基本过滤器组):
def过滤器查询集(自身、请求、查询集、视图):
ids=[1,2,3,4]
queryset=queryset.filter(pk\uu in=ids)
返回查询集
类RealestateViewSet(ModelViewSet):
...
过滤器\后端=[LimitQsetFilter,]
...
然后,您将看到分页时对象实例的筛选列表