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 = 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