Saya memiliki bidang "indeks" yang menyimpan rentang bilangan bulat, demi keamanan saya mengaturnya unik.
sekarang saya ingin menambah bidang ini satu per satu, agar tetap unik saya memperbarui nilainya dalam urutan menurun:
MyModel.objects.all().order_by('-index').update(index=F('index')+1)
yang mengejutkan saya adalah di beberapa mesin IntegrityError muncul dan mengeluhkan nilai indeks duplikat.
apakah ada sesuatu yang saya lewatkan? bisakah saya menyimpan catatan satu per satu saja?
Terima kasih sebelumnya!
PEMBARUAN:
Saya pikir akar masalahnya adalah tidak ada ORDER BY dalam perintah SQL UPDATE (lihat PERBARUI dengan ORDER BY, dan juga SQL Server: UPDATE tabel dengan menggunakan ORDER BY)
Jelas Django hanya menerjemahkan pernyataan saya ke dalam UPDATE SQL dengan ORDER_BY, yang mengarah pada perilaku tidak terdefinisi dan menciptakan hasil yang berbeda per mesin.