Я обновился с Django 1.10.4 до 1.11.1, и внезапно я получаю тонну этих сообщений, когда запускаю тесты:
lib/python3.5/site-packages/rest_framework/pagination.py:208:
UnorderedObjectListWarning:
Pagination may yield inconsistent results with an unordered object_list:
<QuerySet [<Group: Requester>]>
paginator = self.django_paginator_class(queryset, page_size)
Я проследил это до модуля Django Pagination: https://github.com/django/django/blob/master/django/core/paginator.py#L100
Похоже, что это связано с кодом запроса:
return get_user_model().objects.filter(id=self.request.user.id)
Как я могу найти более подробную информацию об этом предупреждении? Кажется, что мне нужно добавить order_by(id)
в конец каждого фильтра, но я не могу найти, какой код нужно добавить order_by (поскольку предупреждение не возвращает трассировку стека, и поэтому это происходит случайно во время моего пробного прогона).
Спасибо!
Edit:
Таким образом, используя @KlausD. verbosity tip, я посмотрел на тест, вызвавший эту ошибку:
response = self.client.get('/api/orders/')
Это относится к OrderViewSet
, но ни одна из вещей в get_queryset не вызывает этого, и ничто в классе serializer не вызывает этого. У меня есть другие тесты, которые используют один и тот же код для получения /api/orders, и это не вызывает его.... Что делает DRF после get_queryset?
https://github.com/encode/django-rest-framework/blob/master/rest_framework/pagination.py#L166
Если я помещу трассировку в разбивку на страницы, я получаю целую кучу вещей, связанных с фреймворком django rest, но ничего, что указывает на то, какие из моих запросов запускают предупреждение о заказе.