PythonDjango REST框架下遇到警告:UnorderedObjectListWarning?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (2208)

我从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分页模块:https://github.com/django/django/blob/master/django/core/paginator.py#L100

它似乎与我的Queryset代码有关:

return get_user_model().objects.filter(id=self.request.user.id)

如何才能找到有关此警告的更多细节?似乎我需要添加一个在每个过滤器的末尾,但我似乎找不到哪些代码需要顺序[医]通过添加(因为警告不返回堆栈跟踪,所以在我的测试运行中随机发生)。

如果我在分页中放置了一个跟踪,那么我会得到一堆与Django REST框架相关的东西,但是没有任何东西表示我的查询触发了订单警告。

提问于
用户回答回答于

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

profile_list = Profile.objects.all()
paginator = Paginator(profile_list, 25)

为了解决这个问题,我将代码更改为:

profile_list = Profile.objects.get_queryset().order_by('id')
paginator = Paginator(profile_list, 25)
用户回答回答于

使用

class Meta:
   ordering = ['-id']

在Django REST框架的ViewSets(app/apviews.py)中,我必须更新所有的get_queryset来添加默认排序的方法,但似乎不起作用。

扫码关注云+社区

领取腾讯云代金券