当前位置: 首页 > 知识库问答 >
问题:

Python Django Rest框架无序对象列表警告

纪佐
2023-03-14

我从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)

如何找到有关此警告的更多详细信息?似乎我需要在每个过滤器的末尾添加一个order\u by(id),但我似乎找不到需要添加order\u by的代码(因为警告不会返回堆栈跟踪,所以在测试运行期间会随机发生)。

谢谢

编辑:

所以使用@klauds。详细提示,我查看了导致此错误的测试:

response=self。客户获取('/api/orders/')

这会转到OrderViewSet,但是get\u queryset中的任何东西都不会导致它,而serializer类中的任何东西都不会导致它。我还有其他的测试,它们使用相同的代码来获取/api/订单,而这些测试并不会导致。。。。DRF在获得查询集后做什么?

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

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

共有3个答案

卫乐童
2023-03-14

让我给出一个最新发展的答案。。。

Django中已删除用户模型的默认顺序。如果您发现自己是因为升级而进入此页面,则很可能与此更改有关。

您可能正在处理此问题的两个版本。

  1. 您自己的模型在其元中没有默认顺序(请参阅接受的答案)

由于Django用户模型本身并不遵循顺序,很明显,第二种情况无法通过要求这些依赖项的维护者进行默认顺序来解决。好的,那么现在你要么必须重写用于你所做的任何事情的模型(有时候是个好主意,但不适合解决这样一个小问题)。

所以你只剩下在视图级别解决它。您还想做一些事情,可以很好地处理您应用的任何排序筛选器类。为此,设置视图的排序参数。

class Reviewers(ListView):
    model = User
    paginate_by = 50
    ordering = ['username']

另请参阅是否有Django List View模型排序?

匡旭东
2023-03-14

我在使用对象时收到了这个警告。在我看来,一切都是如此。派克

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

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

profile_list = Profile.objects.get_queryset().order_by('id')
paginator = Paginator(profile_list, 25)
微生永春
2023-03-14

因此,为了解决这个问题,我必须找到所有的alloffsetfilter、和limit子句,并向它们添加一个order\u by子句。我通过添加默认顺序修复了一些问题:

class Meta:
   ordering = ['-id']

在Django Rest框架(app/apiviews.py)的视图集中,我必须更新所有的get\u queryset方法,因为添加默认顺序似乎不起作用。

希望这能帮助别人。:)

 类似资料:
  • 问题内容: 想知道javascript中是否有没有jquery的函数或任何允许我序列化表单并访问序列化版本的框架? 问题答案: 小型from-serialize库不依赖框架。除此之外,您还需要自己实现序列化功能。(尽管重量为1.2KB,为什么不使用它?)

  • 问题内容: 似乎无法使用WCF的本机DataContractJsonSerializer或ASP.NET的本机JavaScript序列化器将Entity Framework对象序列化为JSON。这是由于两个串行器都拒绝的引用计数问题。我还尝试了Json.NET,它在引用计数问题上也特别失败。 编辑: Json.NET现在可以序列化和反序列化Entity Framework实体 。 我的对象是Ent

  • 问题内容: 我有一个Java类,它是DynamoDB中表的数据模型。我想使用Dynamo 的to 和item。班上一名成员是一名。因此,我使用来对该字段进行序列化和反序列化。 该列表可以通过成功地序列化。但是,当我尝试取回条目并阅读列表时,它会引发异常:。好像将数据反序列化为而不是。我如何摆脱这个问题? MCVE: 问题答案: 问题的一部分是整个DynamoDB Mapper SDK如何处理泛型。

  • 本文向大家介绍Django框架中的对象列表视图使用示例,包括了Django框架中的对象列表视图使用示例的使用技巧和注意事项,需要的朋友参考一下 direct_to_template 毫无疑问是非常有用的,但Django通用视图最有用的地方是呈现数据库中的数据。 因为这个应用实在太普遍了,Django带有很多内建的通用视图来帮助你很容易 地生成对象的列表和明细视图。 让我们先看看其中的一个通用视图:

  • 我正在创建词汇表,一个GUI程序来管理未知单词。我得到: /usr/bin/python3。5/主页/cali/Pycharm项目/词汇表/词汇表。Tkinter回调回溯中的py异常(最近一次调用最后一次): 文件“/usr/lib/python3.5/Tkinter/init.py”,第1553行,在调用返回self中。func(*args)文件“/home/cali/PycharmProjec

  • 我试图使用SimpleXML序列化HealthCase类的对象。我能够正确地序列化所有内容,除了测试对象的ArrayList和每个测试对象拥有的图像对象的ArrayList。所有类的每个字段都有适当的访问器和突变器方法,但是当我尝试序列化时,会抛出各种xml复合写入错误,并且不会写入相关的XML文件。 HealthCase类(不包括方法): 测试类别(不包括方法): 图像类(不包括方法): 我应该