У меня есть поле «индекс», в котором хранится последовательный диапазон целых чисел, для безопасности я устанавливаю его уникальным.
теперь я хочу увеличить это поле на единицу, чтобы сохранить уникальность, я обновляю значение в порядке убывания:
MyModel.objects.all().order_by('-index').update(index=F('index')+1)
что меня удивляет, так это то, что на какой-то машине возникает IntegrityError и жалуется на дублированное значение индекса.
есть ли что-то, что я пропустил? Могу ли я сохранять записи только одну за другой?
заранее спасибо!
ОБНОВЛЕНИЕ:
Я думаю, что основная проблема заключается в том, что в команде SQL UPDATE нет ORDER BY (см. UPDATE с помощью ORDER BY, а также SQL Сервер: ОБНОВИТЬ таблицу с помощью ORDER BY)
Очевидно, что django просто переводит мой оператор в SQL UPDATE с ORDER_BY, что приводит к неопределенному поведению и создает разные результаты для каждой машины.