ผลต่างระหว่างรุ่นของ "Tutorial Odoo 9.0 Part 5 : Relations between models"

จาก Morange Wiki
(Many2one Relations)
แถว 61: แถว 61:
 
== Many2one Relations ==
 
== Many2one Relations ==
  
* ขั้นตอนต่อจากนี้จะเป็นการ เขียน Model ให้มีความสัมพันธ์กันแบบ Many to one  
+
* ขั้นตอนต่อจากนี้จะเป็นการ เขียน Model ให้มีความสัมพันธ์กันแบบ Many to one <br/>
  
 +
=== แก้ไข openacademy/models.py ===
 
<pre>
 
<pre>
 
     name = fields.Char(string="Title", required=True)
 
     name = fields.Char(string="Title", required=True)
 
     description = fields.Text()  
 
     description = fields.Text()  
  
<-- เพิ่มข้อความตรงนี้ -->
+
<!-- เพิ่มข้อความตรงนี้ -->
 
responsible_id = fields.Many2one('res.users',
 
responsible_id = fields.Many2one('res.users',
 
         ondelete='set null', string="Responsible", index=True)
 
         ondelete='set null', string="Responsible", index=True)
 
<-- จบ -->
 
<-- จบ -->
 +
 
class Session(models.Model):
 
class Session(models.Model):
 
     _name = 'openacademy.session'
 
     _name = 'openacademy.session'
 
</pre>
 
</pre>
 +
 +
<pre>
 +
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)
 +
<-- จบ -->
 +
</pre>
 +
 +
=== openacademy/views/openacademy.xml ===
 +
 +
<pre>
 +
                <sheet>
 +
                        <group>
 +
                            <field name="name"/>
 +
<!-- เพิ่มข้อความ -->
 +
                            <field name="responsible_id"/>
 +
<-- จบ -->
 +
                        </group>
 +
                        <notebook>
 +
                            <page string="Description">
 +
</pre>
 +
 +
<pre>
 +
</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",
 +
</pre>
 +
 +
<pre>
 +
<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>
 +
<!-- จบ -->
 +
</pre>
 +
 +
* จะได้พบกับความสัมพันธ์แบบ Many2one

รุ่นแก้ไขเมื่อ 11:47, 14 กรกฎาคม 2559

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