Zaktualizowałem Django z wersji 1.10.4 do 1.11.1 i nagle otrzymuję mnóstwo takich komunikatów, gdy uruchamiam testy:
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)
Prześledziłem to z powrotem do modułu paginacji Django: https://github.com/django/django/blob/master/django/core/paginator.py#L100
Wydaje się, że jest to związane z kodem mojego zestawu zapytań:
return get_user_model().objects.filter(id=self.request.user.id)
Jak mogę znaleźć więcej szczegółów na temat tego ostrzeżenia? Wygląda na to, że muszę dodać order_by(id)
na końcu każdego filtru, ale nie mogę znaleźć kodu, który wymaga dodania polecenia order_by (ponieważ ostrzeżenie nie zwraca śladu stosu i dzieje się to losowo podczas mojego testu biegać).
Dzięki!
Edytować:
Więc używając @KlausD. szczegółowość wskazówka, spojrzałem na test powodujący ten błąd:
response = self.client.get('/api/orders/')
To idzie, OrderViewSet
ale żadna z rzeczy w get_queryset nie powoduje tego i nic w klasie serializatora nie powoduje tego. Mam inne testy, które używają tego samego kodu do pobierania / api / zamówień i nie powodują tego… Co robi DRF po get_queryset?
https://github.com/encode/django-rest-framework/blob/master/rest_framework/pagination.py#L166
Jeśli wstawię śledzenie do paginacji, otrzymam całą masę rzeczy związanych z frameworkiem django rest, ale nic, co wskazuje, które z moich zapytań wyzwala ostrzeżenie o zamówieniu.
-v 2
na większości testerów)