วันนี้ขอพามาคุยกันในหัวข้อแบบ Bite size เอาแค่กำลังพอดี เป็นการรวบรวม Quick tips หลาย ๆ สิ่งที่จะต้องเจอ สำหรับการทำงานกับ One2many fields แล้วกันนะครับ ซึ่งในวันนี้จะขออยู่ในการทำงานกับ models side เล่นกับไฟล์ .py ก่อนนะครับ
Work with data
ผมจะไปพาไปไล่ดูกันทีละตัว ว่าเรามี options อะไรบ้าง ในการทำงานกับข้อมูลในเวลาที่เราใช้ fields เป็น One2many
self.order_line = [(5, 0, [])]
เคยผ่านตากันมาบ้างมั้ยครับ ??? . โค้ดข้างต้นนี้ คือการเคลียร์ข้อมูลใน One2many fields ออกทั้งหมด
. .
แล้วมันมีอะไรอีกบ้างล่ะ ??
(0, 0, { values })
- เป็นการ add record ใหม่เข้าไปโดยใช้ข้อมูลที่อยู่ใน
{values}
- ตัวอย่าง
self.order_line = [(0, 0, {
'order_id': self.id, # self.id = 10
'quantity': 0,
'price_unit': 100
})]
# result: order_line id = 285 added
(1, ID, { values })
- update record โดยต้องระบุ id และ values dict ที่ต้องการเปลี่ยนแปลง
- ตัวอย่าง (สมมติว่าต้องการ update order_line จากข้อก่อนหน้านี้)
self.order_line = [(1, 285, {
'quantity': 10
})]
# result: order_line (285)
# quantity 0 => 10
(2, ID)
- ทำเหมือน action unlink() คือจะเป็นการลบ record id ที่ระบุออกจาก table
- ตัวอย่าง
self.order_line = [(2, 285)]
# result: order_line (285) deleted
(3, ID)
- เป็นการตัด relationship ออกจากกัน แต่ data จะยังอยู่ แค่ reference ขาดออกจากกัน
- ตัวอย่าง
self.order_line = [(3, 286)]
# result: order_line (286)
# let say that order_id = 10
# order_id 10 => None
(4, ID)
- ทำการ link record ที่ระบุไปตาม parent ที่เรียก
- ตัวอย่าง
# let say self.id = 10
self.order_line = [(4, 286)]
# result: order_line (286) link to order_id = 10
(5, 0, [])
or (5)
- Unlink all records เป็นการลบ records ทิ้งทั้งหมด ที่ ref ถึง parent
- ตัวอย่าง
# let say order_line id = 285, 286
self.order_line = [(5, 0, [])]
# self.order_line = [(5)]
# result: order_line (285, 286) deleted
(6, 0, [IDs])
- จะเป็นการ unlink พร้อมกับ link records ทั้งหมดใน step เดียวกัน
- หรือถ้าไล่ step จะคล้ายกับการทำ (5) —> unlink all แล้วตาม (4, ID) link ID เข้าไปใหม่ ตามที่ลิสทั้งหมดใน
[IDs]
- ตัวอย่าง
# product = product object
self.order_line.tax_ids = [(6, 0, product.taxes_id.ids)]
สรุป
- ทั้งหมดที่สามารถใช้งานได้
(0, 0, { values })
(1, ID, { values })
(2, ID)
(3, ID)
(4, ID)
(5) or (5, 0, [])
(6, 0, [IDs])
ก็หวังว่าจะทำให้เข้าใจการทำงานกับ One2many กันมากขึ้น และช่วยให้มีทางเลือกในการ coding มากขึ้นนะครับ ใน devlogs ครั้งหน้า เราจะมาต่อ One2many ninja กับฝั่งหน้า view กันบ้าง
แล้วเจอกันครับ!
>_JV