我从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的代码(因为警告不会返回堆栈跟踪,因此它在测试期间会随机发生跑)。
谢谢!
编辑:
因此,使用@KlausD。详细提示,我查看了一个导致此错误的测试:
response = self.client.get('/api/orders/')
这可以解决,OrderViewSet
但是get_queryset中的任何事情都不会导致它,而序列化程序类中的任何原因都不会导致它。我还有其他使用相同代码来获取/ api / orders的测试,而这些测试不会导致它.... get_queryset之后DRF会做什么?
https://github.com/encode/django-rest-framework/blob/master/rest_framework/pagination.py#L166
如果我对分页进行追溯,那么我会得到一堆与Django rest框架有关的东西,但是没有任何东西可以指出我的哪些查询正在触发顺序警告。
-v 2
在大多数测试跑步者中)