首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python Django Rest框架UnorderedObjectListWarning

Python Django Rest框架UnorderedObjectListWarning
EN

Stack Overflow用户
提问于 2017-05-18 03:53:22
回答 6查看 51.6K关注 0票数 109

我从Django 1.10.4升级到1.11.1,当我运行测试时突然收到大量这样的消息:

代码语言:javascript
复制
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分页模块:https://github.com/django/django/blob/master/django/core/paginator.py#L100

它似乎与我的查询集代码有关:

代码语言:javascript
复制
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/order,但这些测试并不会导致它……在get_queryset之后,DRF做了什么?

https://github.com/encode/django-rest-framework/blob/master/rest_framework/pagination.py#L166

如果我将回溯放到分页中,那么我会得到一大堆与django rest框架相关的东西,但没有任何东西指向我的哪个查询触发了订单警告。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-05-18 07:45:55

因此,为了解决这个问题,我必须找到所有的alloffsetfilterlimit子句,并向它们添加一个order_by子句。我通过添加默认排序修复了一些问题:

代码语言:javascript
复制
class Meta:
   ordering = ['-id']

在Django Rest Framework ( ViewSets /apiviews.py)的apiviews.py中,我必须更新所有的get_queryset方法,因为添加默认顺序似乎不起作用。

希望这对其他人有帮助。:)

票数 165
EN

Stack Overflow用户

发布于 2017-09-11 12:32:27

当我在view.py中使用objects.all()时,我收到了这个警告

代码语言:javascript
复制
profile_list = Profile.objects.all()
paginator = Paginator(profile_list, 25)

要解决此问题,我将代码更改为:

代码语言:javascript
复制
profile_list = Profile.objects.get_queryset().order_by('id')
paginator = Paginator(profile_list, 25)
票数 63
EN

Stack Overflow用户

发布于 2020-10-08 00:08:39

在我的例子中,我必须添加order_by('id')而不是ordering

代码语言:javascript
复制
class IntakeCaseViewSet(viewsets.ModelViewSet):
    schema = None
    queryset = IntakeCase.objects.all().order_by('id')

Ordering需要在模型中使用类元(而不是视图)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44033670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档