ฉันมีฟิลด์ "ดัชนี" ที่เก็บช่วงจำนวนเต็มตามมา เพื่อความปลอดภัยฉันตั้งค่าให้ไม่ซ้ำกัน
ตอนนี้ฉันต้องการเพิ่มฟิลด์นี้ทีละรายการ เพื่อให้ไม่ซ้ำกัน ฉันอัปเดตค่าตามลำดับจากมากไปน้อย:
MyModel.objects.all().order_by('-index').update(index=F('index')+1)
สิ่งที่ทำให้ฉันประหลาดใจก็คือ ในเครื่องบางเครื่อง IntegrityError ปรากฏขึ้นและบ่นว่าค่าดัชนีซ้ำกัน
มีอะไรที่ฉันพลาดไปหรือเปล่า? ฉันสามารถบันทึกทีละรายการได้หรือไม่?
ขอบคุณล่วงหน้า!
อัปเดต:
ฉันคิดว่าปัญหาที่แท้จริงคือ ไม่มี ORDER BY ในคำสั่ง SQL UPDATE (ดู อัปเดตด้วย ORDER BY และ SQL เซิร์ฟเวอร์: อัปเดตตารางโดยใช้ ORDER BY)
แน่นอนว่า django เพียงแปลคำสั่งของฉันเป็น SQL UPDATE ด้วย ORDER_BY ซึ่งนำไปสู่พฤติกรรมที่ไม่ได้กำหนดและสร้างผลลัพธ์ที่แตกต่างกันในแต่ละเครื่อง