我通过将序数分配给 来管理Documents
a的顺序,这是表示 a和 a交集的模型。这是我这样做的一个地方(这是在一个方法中):Collection
DocumentMemberships
Document
Collection
Collection
memberships = self.membership_set.order_by('document__title', 'document__revision').all()
for i in range(memberships.count()):
if memberships[i].document.category == 'SDS':
memberships[i].ordinal = i + 1000 # push documents in the 'SDS' category to the end
else: memberships[i].ordinal = i # leave the rest ordered by title and then revision
memberships[i].save()
但是,当我DocumentMemberships
在运行此代码后在管理界面中检查时,所有序数都为零(该字段的默认值)。
我将问题追溯到 QuerySet 中的对象在被索引访问时没有被正确修改。这是一个更清楚地说明问题的 shell 会话:
>>> memberships = s.membership_set.order_by('document__title', 'document__revision').all()
>>> memberships.all()
[large number of DocumentMembership objects]
>>> memberships[0]
[DocumentMembership object]
>>> memberships[0].ordinal = 2
>>> memberships[0].ordinal
0
在进一步处理之前,序数必须完全计算为整数,所以我不能简单地迭代它。我错过了什么?