按字母顺序排序不起作用

时间:2015-03-08 17:11:02

标签: python django

我有一个具有名称字段的模型。它的定义如下

name = models.CharField(db_index=True, max_length=150, unique=True)

然后,当我检索模型时,我想按字母顺序对结果进行排序。要获得前25个,我会执行以下操作:

Company.objects.order_by("name").defer("bic")[:25]

这导致一个有趣的顺序:

  1. Avocado Outdoors GmbH
  2. Apricot Computers
  3. 香蕉公司
  4. Apple Computers GmbH
  5. 为什么?

    我也有以下内容,但它不应该影响排序,是吗?

    for company in company_list.iterator():
        companies[company.id] = company
    

    上面的列表是根据最新代码段中的companies打印的。

2 个答案:

答案 0 :(得分:0)

Django QuerySet文档中有一节说明:

请注意,在已经评估的QuerySet上使用iterator()将强制它再次进行评估,重复查询。

因此,如果您正在调用迭代器,那么它将重新评估QuerySet,这可能会导致排序不一致。

正如第一条评论中所提到的,不需要使用迭代器,因为你已经用行形成了QuerySet

Company.objects.order_by("name").defer("bic")[:25]

答案 1 :(得分:0)

问题解决了。

我实际上是从数据库中以正确的顺序获取它们,但后来我按照前面的说明迭代它们。

for company in company_list.iterator():
    companies[company.id] = company

我不知道字典没有订单。我在想这就像Java中的ArrayLists。它们按插入顺序排列。后来我用这本词典打印出公司。

我将公司类型从dict更改为OrderedDict,它解决了问题。

所以没有

companies = {}

我做了

companies = OrderedDict()