Django中的反向Queryset顺序
在Django中,有没有简单的方法来反转查询集的顺序 例如:Django中的反向Queryset顺序,django,django-orm,Django,Django Orm,在Django中,有没有简单的方法来反转查询集的顺序 例如: li=[1,2,3] queryset=Collection.objects.filter(pk\uu in=li) 以反转qs queryset = Collection.objects.filter(pk__in = li).order_by('field_name') 如果出于某种原因,您不想使用order_,那么请反转列表 queryset = Collection.objects.filter(pk__in = li) r
li=[1,2,3]
queryset=Collection.objects.filter(pk\uu in=li)
以反转qs
queryset = Collection.objects.filter(pk__in = li).order_by('field_name')
如果出于某种原因,您不想使用order_,那么请反转列表
queryset = Collection.objects.filter(pk__in = li)
result = reversed(list(queryset))
你可以用
queryset = reversed(Collection.objects.filter(pk__in = li))
或
如何使用
order\u by()
?如何翻转已生成的查询集?我不是真的点什么菜。按(-)排序会起作用吗?它是按某种顺序排列的,即使您没有在查询中指定它。它可能是在模型中指定的,或者只是由pk作为默认值。我想,在默认情况下,您可以按(-pk)订购。如果查询集不是太大,您可以在Python内存中通过将其强制转换为列表并执行[:-1]
切片或使用反向
@Two-bitalchest来完成它。默认情况下,它肯定不是按pk
排序的。除非以某种方式指定了顺序,否则查询集是无序的,即没有任何保证的任意顺序。@Two Bitalchest他们通常看起来是在pk上排序的。确切的顺序取决于许多因素,最重要的是顺序行是物理存储在磁盘上的。如果您只插入带有序列主键的行,则结果集的顺序可能相同,但这不是您可以依赖的假设。我明白这不是你的主要观点,但这是一个重要的区别,也是一个非常常见的误解。是否需要重新加载服务器才能进行更改?@ramisanjumaditi服务器会在您进行任何更改时自动重新加载。注意:如果使用reverse()
查询集的结果可能会更改。在django==1.11.17中测试
我选择了list(reversed(qs))
reverse()
如果没有先使用order\u by()
,就不能使用。否则,您将在无序的QuerySet上进行反转,这没有任何意义,并且将提供不一致的结果
queryset = Collection.objects.filter(pk__in = li).reverse()