Tutorial Odoo 9.0 Part 7 : Computed fields and default values

จาก Morange Wiki

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 เป็นวันปัจจุบัน ดังภาพ Odoo7-4.png

หัวข้อถัดไป Tutorial Odoo 9.0 Part 8 : Onchange & Model constraints