我通过将序号分配给Documents
来管理Collection
中DocumentMemberships
的顺序,Document
是表示Collection
和{{}的交集的模型1}}。这是我做的一个地方(这是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
在进一步处理之前,序数必须作为整数完全计算,所以我不能简单地迭代它。我错过了什么吗?
答案 0 :(得分:2)
问题在于,当您使用索引从查询集中获取对象时,您获取的对象是原始对象的副本,因此您将修改查询集“内部”对象的副本。
如果你这样做:
m = memberships[0]
m is membership[0]
结果会得到False
。
试试this。也许这可以帮助您解决在查询集中使用对象索引更新其属性的问题。
希望它有所帮助!