我有一个"索引"字段存储随之而来的整数范围,为了安全起见,我将其设置为唯一。
现在我想将此字段增加一个,以保持唯一,我按降序更新值:
MyModel.objects.all().order_by('-index').update(index=F('index')+1)
让我感到惊讶的是,在某台计算机上是一个IntegrityError 被提出并抱怨重复的索引值。
我错过了什么吗?我可以一个一个地保存记录吗?
提前感谢!
更新:
我认为根本问题是 SQL UPDATE命令中没有ORDER BY (请参阅UPDATE with ORDER BY,还有SQL Server: UPDATE a table by using ORDER BY)
显然django只是将我的语句转换为带有ORDER_BY的SQL UPDATE,这会导致一个未定义的行为,并为每台机器创建不同的结果。