【发布时间】:2017-10-17 10:28:45
【问题描述】:
我从 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 并且不会导致它.... DRF 在 get_queryset 之后做什么?
https://github.com/encode/django-rest-framework/blob/master/rest_framework/pagination.py#L166
如果我将回溯放到分页中,那么我会得到一大堆与 django rest 框架相关的东西,但没有任何东西可以指出我的哪个查询触发了订单警告。
【问题讨论】:
-
通常应该很容易通过导致警告的测试名称找到。您可能希望以冗长的方式运行测试(大多数测试运行程序为
-v 2) -
感谢@KlausD。这是一个有用的提醒。
-
查找您正在执行
offset和limit但没有order_by的查询 -
谢谢@gipsy。这些我都没有……
标签: python django django-rest-framework