Tutorial Odoo 9.0 Part 7 : Computed fields and default values
Computed fields and default values
Dependencies
แก้ไขไฟล์ดังนี้
openacademy/models.py
course_id = fields.Many2one('openacademy.course', ondelete='cascade', string="Course", required=True) attendee_ids = fields.Many2many('res.partner', string="Attendees") taken_seats = fields.Float(string="Taken seats", compute='_taken_seats') @api.depends('seats', 'attendee_ids') def _taken_seats(self): for r in self: if not r.seats: r.taken_seats = 0.0 else: r.taken_seats = 100.0 * len(r.attendee_ids) / r.seats
ส่วนนี้ จะเป็นการสร้าง method เพื่อคำนวนค่าของ taken seats
โดยจะคำนวนจาก จำนวน attendee (ผู้ที่ลงทะเบียน) ใน session นั้นๆ และ seats (จำนวนที่นั่งสูงสุด) ที่รองรับ ของ session นั้นๆ
จากนั้นทำการคิดเป็นเปอร์เซ็นต์
openacademy/views/openacademy.xml
<field name="start_date"/> <field name="duration"/> <field name="seats"/> <field name="taken_seats" widget="progressbar"/> </group> </group> <label for="attendee_ids"/>
ส่วนนี้เป็นการเพิ่ม taken seats ใน form ของ session ดังภาพ
openacademy/views/openacademy.xml
<tree string="Session Tree"> <field name="name"/> <field name="course_id"/> <field name="taken_seats" widget="progressbar"/> </tree> </field> </record>
และส่วนนี้เป็นการเพิ่ม taken seats ใน tree view ของ session ดังภาพ
Default values
แก้ไขไฟล์ดังนี้
openacademy/models.py
_name = 'openacademy.session' name = fields.Char(required=True) start_date = fields.Date(default=fields.Date.today) duration = fields.Float(digits=(6, 2), help="Duration in days") seats = fields.Integer(string="Number of seats") active = fields.Boolean(default=True) instructor_id = fields.Many2one('res.partner', string="Instructor", domain=['|', ('instructor', '=', True),
ในส่วนนี้จะเป็นการเพิ่ม field active พร้อมกับให้ค่า default เป็น true
และปรับ start_date โดยเพิ่มค่า default เป็นวันปัจจุบัน
openacademy/views/openacademy.xml
<field name="course_id"/> <field name="name"/> <field name="instructor_id"/> <field name="active"/> </group> <group string="Schedule"> <field name="start_date"/>
เมื่อสร้าง session ใหม่ จะปรากฏ active ที่มีค่าเริ่มต้นเป็น true และ ค่าเริ่มต้นของ start_date เป็นวันปัจจุบัน ดังภาพ
หัวข้อถัดไป Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints