如何在Django queryset中使用order_by?

时间:2019-12-03 11:49:39

标签: python django python-3.x

我将order_by应用于查询集,结果混合在一起。 如果将其应用于查询集,有什么区别?

该表包含三列:名称年龄说明 这是代码:

Query = table1.objects.filter(Name__iexact='Nico').order_by('Age').distinct()
ages = Query.values_list('Age')
descr= Query.values_list('Description')

此处仅“年龄”已正确排序。这些年龄和描述之间的匹配失真。怎么了?

2 个答案:

答案 0 :(得分:1)

怎么了?好吧,实际上是设计本身。 “并行列表”-两个在位置上匹配的列表(或类似类型)是一种反模式。它笨重,难以使用(您必须跟踪索引并在两个列表下标),并且比较脆弱(如果由于任何原因更改了列表之一,数据将不再匹配)。

如果您需要使这两种信息保持匹配,则将它们作为元组(在query.values_list("Age", "Description")或字典(在query.values("Age", "Description")))放在一个列表(或在此处的查询集中),这将使您的代码更简单,更安全。

NB:我当然假设您要匹配这两个查询集,因为您提到“这些年龄和描述之间的匹配被扭曲了”。

答案 1 :(得分:0)

尝试将order_by放在不同的结尾处。

可以尝试

Query = table1.objects.filter(Name__iexact='Nico').distinct()

Query = Query.order_by('Age')