クエリセットのフィールドをアトミックに更新しようとしています。私はこのようなものがあります:クエリセット内のすべてのインスタンスをアトミックにカウントする
counter = 0
for row in myQuerySet:
row.myField = counter
counter = counter + 1
row.save()
動作しますが、私は、レジスタの数百を持っているので、私は、アトミックこれをしたいと、それは時間の無駄です。私はこのようなものが必要です:
counter = 0
myQuerySet.update(myField=(counter+=1))
しかし、これは動作しません。これに対して正しいsintaxは何ですか?動作しますが、私はアトミックこれをしたい
updateステートメントは単一のSQLクエリを作成します。テーブルの一部ではない値を使用している場合(つまり、フィールドではない場合)、定数として扱われます。その場合、すべての行は同じ値。 – AKS
'F()'オブジェクトは、既存のフィールド値に基づいてフィールドを更新するのに役立ちますが、増分する外部値に基づいてフィールドを更新する方法は考えられません。 –
@ Sayse "step_number"整数フィールドを持つレジスタがたくさんあります。このフィールドは手動で変更できます。たとえば、5つのレジスタがある場合、step_numbersは1,2,3,8,9になります。たとえば、ギャップのある増分シーケンスを取得できます。しかし、私は1,2,3,4,5シーケンスを得るために番号を付けなおしたいと思います。それがカウンターの目的です。 – MouTio