我有一个具有名称字段的模型。它的定义如下
name = models.CharField(db_index=True, max_length=150, unique=True)
然后,当我检索模型时,我想按字母顺序对结果进行排序。要获得前25个,我会执行以下操作:
Company.objects.order_by("name").defer("bic")[:25]
这导致一个有趣的顺序:
为什么?
我也有以下内容,但它不应该影响排序,是吗?
for company in company_list.iterator():
companies[company.id] = company
上面的列表是根据最新代码段中的companies
打印的。
答案 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()