开发者社区> 问答> 正文

Python Django Rest框架无序对象列表

我从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框架有关的东西,但没有任何东西指向我的哪个查询正在触发顺序警告。

展开
收起
祖安文状元 2020-02-21 16:03:54 603 0
1 条回答
写回答
取消 提交回答
  • 因此,为了解决这个问题我必须找到所有的all,offset,filter,以及limit条款和补充order_by条款给他们。我通过添加默认顺序来解决一些问题:

    1. 
    class Meta:
       ordering = ['-id']
    在```  
    Django Rest Framework的ViewSets(app / apiviews.py)中,我不得不更新所有get_queryset方法,因为添加默认顺序似乎不起作用。
    
    希望这对其他人有帮助。:)
    2020-02-21 16:04:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载