016

ประเภทของ ondelete 3 วิธีใน Odoo code

ประเภทของ ondelete option ใน fields.Many2one มีอยู่ด้วยกัน 3 แบบ

  1. fields.Many2one(‘model’, ondelete=’cascade‘)
    • หมายความว่า ถ้าข้อมูลรายการของ model ที่ถูกอ้างถึงถูกลบ รายการผู้อ้างก็จะถูกลบไปด้วย
  2. fields.Many2one(‘model’, ondelete=’restrict‘)
    • หมายความว่า ถ้าข้อมูลรายการของ model ที่ถูกอ้างถึงถูกลบ ระบบจะเตือนว่ามีรายการอื่นที่ยังอ้างถึงอยู่และระบบจะไม่ยอมให้ลบ
  3. 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 หากแต่เป็นข้อมูลที่ไม่มีความสำคัญมากนักก็อาจพอยอมได้

 

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *