2015-04-13 2 views
0

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

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

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

, что меня удивляет, что на какой-то машине IntegrityError получает поднимается и жалуется для дублированного значения индекса.

Есть ли что-нибудь, что я пропустил? Могу ли я сохранить записи только один за другим?

благодарит заранее!

UPDATE:

Я думаю, что корень проблемы в том, что нет ORDER BY в команде SQL UPDATE (см UPDATE with ORDER BY, а также SQL Server: UPDATE a table by using ORDER BY)

Очевидно Джанго просто переводит мое заявление в SQL UPDATE с ORDER_BY, что приводит к неопределенному поведению и создает разные результаты для каждой машины.

ответ

1

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

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

Django docs for order_by

Смежные вопросы