ประเภทของ ondelete 3 วิธีใน Odoo code
ประเภทของ ondelete option ใน fields.Many2one มีอยู่ด้วยกัน 3 แบบ
- fields.Many2one(‘model’, ondelete=’cascade‘)
- หมายความว่า ถ้าข้อมูลรายการของ model ที่ถูกอ้างถึงถูกลบ รายการผู้อ้างก็จะถูกลบไปด้วย
- fields.Many2one(‘model’, ondelete=’restrict‘)
- หมายความว่า ถ้าข้อมูลรายการของ model ที่ถูกอ้างถึงถูกลบ ระบบจะเตือนว่ามีรายการอื่นที่ยังอ้างถึงอยู่และระบบจะไม่ยอมให้ลบ
- fields.Many2one(‘model’, ondelete=’set null‘)
- หมายความว่า ถ้าข้อมูลรายการของ model ที่ถูกอ้างถึงถูกลบก็ยอมให้ลย แต่ระบบจะ set null ในฟิลด์นี้ของรายการที่อ้ง
การประกาศว่า cascade แต่ละแบบเหมาะสมกับแต่ละสถานการณ์ไม่เหมือนกัน
Cascade
มักใช้กับ Document ที่มีส่วนหัวและส่วนรายการที่ถึงเป็นเอกสารเดียวกัน อย่างเช่น Sales Order มี Sales Order Line, ใน sales order line จะมีการสร้าง
order_id = fields.Many2one(‘sale.order’, ondelete=’cascade’)
ซึ่งจะให้เมื่อ Sales Order ถูกลบ Sales Order Line ก็จะถูกลบไปด้วย ซึ่งเป็นสิ่งที่ถูกต้อง
Restrict
มักใช้กับการอ้างถึง Master Data เช่น Sales Order มีการอ้างถึงลูกค้า
partner_id = fields.Many2one(‘res.partner’, ondelete=’restrict’)
และเนื่องจากการลบ master data ลูกค้า เราคงไม่อยากให้ระบบลบ Sales Order ทั้งระบบที่อ้างถึงลูกค้านี้ด้วยแน่ (ถ้าใช้ cascade) ดังนั้นการใช้ restrict เพื่อไม่ยอมให้มีการลบลูกค้าที่มีใช้ใน Sales Order แล้วจึงเหมาะสม
Set Null
น่าจะเป็นประเภทที่ใช้น้อยที่สุด การที่ยอมให้ระบบลบข้อมูลที่ถูกอ้างถึงในรายการอื่นๆและ set null ไปที่รายการนั้นๆโดยไม่แจ้งเตือนอะไร น่าจะเป็นสิ่งที่ไม่พึงประสงค์ในระบบ ERP หากแต่เป็นข้อมูลที่ไม่มีความสำคัญมากนักก็อาจพอยอมได้
Leave a Reply
Want to join the discussion?Feel free to contribute!