Developer Logs

odoo One2many ninja! work with odoo views like a ninja

odoo
xml

Bite size กับการทำงานกับ One2many ผ่านหน้า views ใน odoo ที่จะทำให้เราเข้าใจในการเขียน code มากขึ้น

Days: 8 | Publish : 02/03/2025

odoo one2many ninja ! tips and trick to work with one2many views
              

จาก 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 นึงที่สำคัญไม่แพ้กัน ในการใช้งานกับ view

parent.{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