DJANGO REST框架-API调用仅返回20个实体

时间:2019-03-06 15:44:37

标签: django rest api frameworks truncate

Django 1.11.3,python 3.6,coreapi 2.3.3

我从客户端对我的网站代码执行API调用。

listProducts = self.amyClient.getProducts() 哪个调用:        results = self.client.action(schema, ["products", "list"])

在网站方面,它执行queryset = Product.objects.all(),没有过滤器。

get_queryset之前的len(queryset)方法return queryset中,我给了52个条目。

在客户端len(listProduct)上是20。我添加了几个条目只是为了查看会发生什么-在API调用中,返回的实体的数量发生了变化(因此,这不是“连接到错误的数据库”的问题) ),在客户端始终为20。 在API调用中,results['count']是52,len(results['results'])是20。

将queryset投射到列表(即queryset = list(Product.Objects.all()))并不会改变任何东西,我也不希望这样做,只是因为在API调用代码中它已经正确了。必须在接收方(客户端)截断某些内容。什么?谢谢。

我的观点:

class ProductList(generics.ListAPIView):
    permission_classes = (IsBotOrReadOnly,)

    """
    API endpoint that allows users to be viewed or edited.
    """

    serializer_class = ProductSerializer

    schema = AutoSchema(
        manual_fields=[
            coreapi.Field("productcode"),
        ]
    )


    def get_queryset(self):


        productcode = self.request.query_params.get('productcode', None)

        queryset = Product.active.all()

        if productcode is not None:
            queryset = list(Product.active.filter(productcode=productcode))
        else:
            queryset = Product.active.all()
        # prints 52
        print (len(queryset))
        return queryset

1 个答案:

答案 0 :(得分:0)

通过settings.py(服务器端)中的此设置,结果是发送回客户端的输出被框架截断:

REST_FRAMEWORK = {
    .......
    'PAGE_SIZE': 20,
    .......
}

我真的很奇怪为什么这是默认行为,为什么默认值高达20:-)。

感谢@Alasdair或将我指向分页文档。