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
答案 0 :(得分:0)
通过settings.py
(服务器端)中的此设置,结果是发送回客户端的输出被框架截断:
REST_FRAMEWORK = {
.......
'PAGE_SIZE': 20,
.......
}
我真的很奇怪为什么这是默认行为,为什么默认值高达20:-)。
感谢@Alasdair或将我指向分页文档。