aと aの交点を表すモデルである に序数をつけDocuments
て aの順番を管理しています。これを行う場所の 1 つを次に示します (これは のメソッド内にあります)。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 内のオブジェクトが適切に変更されないという問題を追跡しました。これは、問題をより明確に示すシェル セッションです。
>>> 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
序数は、さらに処理する前に整数として完全に計算する必要があるため、単純に反復することはできません。私は何か見落としてますか?