DJANGO REST Framework - вызов API возвращает только 20 объектов из множества других - PullRequest
0 голосов
/ 06 марта 2019

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

1 Ответ

0 голосов
/ 06 марта 2019

Оказывается, что выходные данные, отправленные обратно клиенту, усекаются платформой с помощью этого параметра в settings.py (на стороне сервера):

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

Мне действительно интересно, почему это поведение по умолчанию и почему значение по умолчанию колоссально 20 :-).

Спасибо @Alasdair или указали мне на документацию по подкачке.

...