我将order_by应用于查询集,结果混合在一起。 如果将其应用于查询集,有什么区别?
该表包含三列:名称年龄说明 这是代码:
Query = table1.objects.filter(Name__iexact='Nico').order_by('Age').distinct()
ages = Query.values_list('Age')
descr= Query.values_list('Description')
此处仅“年龄”已正确排序。这些年龄和描述之间的匹配失真。怎么了?
答案 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')