обновить набор запросов в определенном порядке

У меня есть поле «индекс», в котором хранится последовательный диапазон целых чисел, для безопасности я устанавливаю его уникальным.

теперь я хочу увеличить это поле на единицу, чтобы сохранить уникальность, я обновляю значение в порядке убывания:

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, что приводит к неопределенному поведению и создает разные результаты для каждой машины.


person Sam    schedule 13.04.2015    source источник


Ответы (1)


Вы упорядочиваете набор запросов по возрастанию. Вы можете сделать это по убыванию, добавив «-» к имени поля в следующем порядке:

MyModel.objects.all().order_by('-index').update(index=F('index')+1)

Документы Django для order_by

person Fran Muñoz    schedule 13.04.2015