จาก devlogs ในรอบที่แล้ว เราคุยกันไปกับการทำงานในฝั่ง model กันไปแล้ว [[Day7 - odoo One2many ninja! work with odoo models like a ninja]] วันนี้เราจะมาดูกันต่อว่าเราทำอะไรได้บ้างกับหน้า views มีเรื่องอะไรที่เราควรจะต้องรู้อีกบ้าง . .
. .
ฝั่งหน้า view ไม่ขอน้อยหน้า เราไปกันต่อกับ Tips แบบ Bite-size ที่พอจะช่วยให้ชีวิตดีขึ้นได้
. .
เคยติดปัญหาแบบนี้มั้ยครับ ต้องการทำ invisible field แต่ไอ field เจ้ากรรมนั้น มันดูอยู่ใน line relation ประมาณแบบนี้
sales.order --> sales.order.line
แล้วโจทย์ที่ต้องการ คือซ่อน fields ที่อยู่ในระดับ
order_line
โดยปกติที่เราจะทำในการซ่อน fields เราก็จะใช้invisible=1
ประมาณนี้<field name="quantity" invisible="1" />
แต่ ! ! ! พอเป็นใน
order_line
สิ่งที่เราจะเจอก็คือ field มันไม่ถูกซ่อนไปนี่ล่ะสิ
column_invisible
ขอพาไปรู้จักกับ atrributes อีกหนึ่งตัวที่เราจะนำมาใช้ในสถานการณ์นี้ ในกรณีที่เราต้องการจะซ่อน field ที่อยู่ใน order_line เราก็จะใช้
<field name="quantity" column_invisible="1" />
ทีนี้ถ้าโจทย์ที่ต้องการ คือ ทำให้มันเป็น Dynamic สามารถเปลี่ยนแปลงการ invisible ได้ โดยอิงจาก fields ที่อยู่ใน
sales.order
ผมจะพาไปรู้จักกับอีก atrributes นึงที่สำคัญไม่แพ้กัน ในการใช้งานกับ viewparent.{field_from_parent}
สมมติให้มี field สำหรับการทำ dynamic ชื่อ
has_quantity
(sales.order) โดยให้has_quantity มี value เป็น - no = ให้ปิดการแสดงผล quantity - required = ให้ field quantity เป็น required field
ถ้าเราต้องการทำให้ fields ที่อยู่ใน order_line สามารถ ref มาได้ โดยไม่ต้องเขียน fields เพิ่มมาเพื่อทำการ related แต่อย่างใด
<field name="quantity" attrs="{ 'column_invisible': [('parent.has_quantity', '=', 'no')], 'required': [('parent.has_quantity', '=', 'required')], }" />
ก็จะเป็นการใช้ parent ใน attrs เพื่อการ ref ไปหา field จากต้นทางมาได้
สำหรับ Tips ในวันนี้ ก็จะเป็นการทำงานกับหน้า views ได้ดีมากยิ่งขึ้น เปิดความเป็นไปได้เพิ่มอีกหนึ่งอย่าง ก็หวังว่าจะช่วยให้ได้วิธีการในการ implement เพิ่มอีกสักหนึ่งทางแล้วกันนะคร้าบ
>_JV
