วิธีบังคับใช้เฉพาะออบเจ็กต์เดียวจากออบเจ็กต์ทั้งหมดของโมเดลที่มีค่าที่ระบุสำหรับฟิลด์

ฉันกำลังเขียนโมเดล ModelX และมันจะมี obj1, obj2 และอื่นๆ อยู่หลายตัว

ModelX มีฟิลด์ fieldX

ฉันต้องการให้แน่ใจว่าสำหรับ obj1, obj2, obj3 ฯลฯ ทั้งหมด มีเพียงอันเดียวเท่านั้นที่มี fieldX = "XXX" และไม่มีอันอื่นใดที่มี

ฉันสามารถใส่การยืนยันใน pre_save() หรือ post_save() ได้ แต่มีวิธีที่สะอาดกว่าในการดำเนินการนี้ในระดับฐานข้อมูล เพื่อให้เกิด IntegrityError หรือไม่

ขอบคุณ

อัปเดต

ฉันมีโมเดล Link ซึ่งมี Foreignkey ให้กับ User, access_token = textfield และ bool is_active

ฉันต้องการบังคับใช้เมื่อใดก็ได้ สำหรับอ็อบเจ็กต์ Link สำหรับผู้ใช้เฉพาะ เฉพาะศูนย์หรือหนึ่งอ็อบเจ็กต์เท่านั้นที่สามารถมี is_active True และอ็อบเจ็กต์จำนวนเท่าใดก็ได้สามารถมี is_active = False


person dowjones123    schedule 16.09.2014    source แหล่งที่มา


คำตอบ (2)


ข้อจำกัด UNIQUE ใช้ได้กับทั้งค่าจริงและค่าเท็จ หากคุณต้องการใช้งานจริง คุณต้องทำให้ฟิลด์ is_active เป็นโมฆะ และใช้ None (NULL) แทน False เนื่องจาก NULL สองตัวไม่ถือว่าเท่ากัน (อย่างน้อยใน PostgreSQL และ MySQL)

person Tomasz Zieliński    schedule 16.09.2014

ใช่ ใช้ตัวเลือกฟิลด์ 'ไม่ซ้ำกัน' ในคำจำกัดความโมเดล https://docs.djangoproject.com/en/dev/ref/models/fields/#unique

person hellsgate    schedule 16.09.2014
comment
obj1.FieldX = XXX, obj2.FieldX = YYY , obj3.FieldX = YYY ควรได้รับอนุญาตในกรณีของฉัน แต่จะไม่ซ้ำกัน - person dowjones123; 16.09.2014
comment
@ dowjones123 บางทีคุณควรอธิบายเพิ่มเติมอีกหน่อยว่าคุณพยายามทำอะไรให้สำเร็จ? - person jonrsharpe; 16.09.2014
comment
ฉันได้อัปเดตโพสต์ต้นฉบับเพื่อให้มีแนวคิดที่ดีขึ้น ขอบคุณล่วงหน้า - person dowjones123; 16.09.2014