Tutorial Odoo 9.0 Part 5 : Relations between models

จาก Morange Wiki

Relations between models

ความสัมพันธ์ของ Model กับ Model โดยใน Part นี้จะสอนวิธีการเขียนโปรแกรมให้ Model เชื่อมต่อกัน

  • แก้ไขไฟล์ดังนี้

openacademy/models.py

   <!-- เพิ่มไฟล์ต่อจาก Class ล่าสุด -->
class Session(models.Model):
    _name = 'openacademy.session'

    name = fields.Char(required=True)
    start_date = fields.Date()
    duration = fields.Float(digits=(6, 2), help="Duration in days")
    seats = fields.Integer(string="Number of seats")

openacademy/views/openacademy.xml

<!-- เพิ่มข้อความลงไป -->

        <!-- session form view -->
        <record model="ir.ui.view" id="session_form_view">
            <field name="name">session.form</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <form string="Session Form">
                    <sheet>
                        <group>
                            <field name="name"/>
                            <field name="start_date"/>
                            <field name="duration"/>
                            <field name="seats"/>
                        </group>
                    </sheet>
                </form>
            </field>
        </record>

        <record model="ir.actions.act_window" id="session_list_action">
            <field name="name">Sessions</field>
            <field name="res_model">openacademy.session</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
        </record>

        <menuitem id="session_menu" name="Sessions"
                  parent="openacademy_menu"
                  action="session_list_action"/>
    </data>
</openerp>
  • ทำการ Update เพื่อทำการแสดงผลลัพท์
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย


  • จะได้ผลที่เกิดตามภาพคือ จะมีแถบ Session ตรงข้างขวา

Many2one Relations

  • ขั้นตอนต่อจากนี้จะเป็นการ เขียน Model ให้มีความสัมพันธ์กันแบบ Many to one

แก้ไข openacademy/models.py

    name = fields.Char(string="Title", required=True)
    description = fields.Text() 

<!-- เพิ่มข้อความตรงนี้ -->
responsible_id = fields.Many2one('res.users',
        ondelete='set null', string="Responsible", index=True)
<-- จบ -->

class Session(models.Model):
    _name = 'openacademy.session'
 start_date = fields.Date()
    duration = fields.Float(digits=(6, 2), help="Duration in days")
    seats = fields.Integer(string="Number of seats")

<!-- เพิ่มข้อความตรงนี้ -->
    instructor_id = fields.Many2one('res.partner', string="Instructor")
    course_id = fields.Many2one('openacademy.course',
        ondelete='cascade', string="Course", required=True)
<-- จบ -->

openacademy/views/openacademy.xml

                 <sheet>
                        <group>
                            <field name="name"/>
<!-- เพิ่มข้อความ -->
                            <field name="responsible_id"/>
<-- จบ -->
                        </group>
                        <notebook>
                            <page string="Description">
 </field>
        </record>

 <!-- เพิ่มข้อความตรงนี้ -->
        <!-- override the automatically generated list view for courses -->
        <record model="ir.ui.view" id="course_tree_view">
            <field name="name">course.tree</field>
            <field name="model">openacademy.course</field>
            <field name="arch" type="xml">
                <tree string="Course Tree">
                    <field name="name"/>
                    <field name="responsible_id"/>
                </tree>
            </field>
        </record>
<!-- จบ-->
        <!-- window action -->
        <!--
            The following tag is an action definition for a "window action",
<form string="Session Form">
                    <sheet>
                        <group>
<!-- เพิ่มข้อความตรงนี้ -->
                            <group string="General">
                                <field name="course_id"/>
                                <field name="name"/>
                                <field name="instructor_id"/>
                            </group>
                            <group string="Schedule">
                                <field name="start_date"/>
                                <field name="duration"/>
                                <field name="seats"/>
                            </group>
<!-- จบ -->
                        </group>
                    </sheet>
                </form>
            </field>
        </record>
<!-- เพิ่มข้อความตรงนี้ -->
        <!-- session tree/list view -->
        <record model="ir.ui.view" id="session_tree_view">
            <field name="name">session.tree</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <tree string="Session Tree">
                    <field name="name"/>
                    <field name="course_id"/>
                </tree>
            </field>
        </record>
<!-- จบ -->
  • จะได้พบกับความสัมพันธ์แบบ Many2one

Many2Many

=== openacademy/models.py===

    instructor_id = fields.Many2one('res.partner', string="Instructor")
    course_id = fields.Many2one('openacademy.course',
        ondelete='cascade', string="Course", required=True)
    attendee_ids = fields.Many2many('res.partner', string="Attendees")

=== openacademy/views/openacademy.xml ===

                                <field name="seats"/>
                            </group>
                        </group>
<!-- เพิ่มข้อความตรงนี้ -->
                        <label for="attendee_ids"/>
                        <field name="attendee_ids"/>
<!-- จบ -->
                    </sheet>
                </form>
            </field>

สังเกตผลลัพท์ที่ได้ ดังรูปนี้

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย

หัวข้อถัดไป Tutorial Odoo 9.0 Part 6 : Inheritance