ผลต่างระหว่างรุ่นของ "Tutorial Odoo 9.0 Part 6 : Inheritance"

จาก Morange Wiki
(หน้าที่ถูกสร้างด้วย '<h2>Inheritance</h2> *<h3>Model Inheritance</h3> แก้ไขไฟล์ดังนี้ <br/><br/> openacademy/__init__.py <pre>...')
 
 
(ไม่แสดง 8 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 26: แถว 26:
 
         string="Attended Sessions", readonly=True)
 
         string="Attended Sessions", readonly=True)
 
</pre>
 
</pre>
 +
 +
class partner นี้เป็นการสืบทอด จาก res.partner และทำการเพิ่ม field instructor เป็นชนิด boolean เพื่อเก็บข้อมูลว่า partner เป็น ผู้สอนหรือไม่
 +
และ session_ids เพื่อเชื่อมโยงไปยัง openacademy.session เพื่อเก็บข้อมูลว่า partner เข้าร่วมกับ session ใดบ้าง (Attended sessions) และ partner แต่ละคน สามารถเข้าร่วมได้หลาย session
 +
ดังภาพ
 +
[[ไฟล์:Odoo6-7.png|800px]]
 
<br/><br/>
 
<br/><br/>
 
*<h3>View Inheritance</h3>
 
*<h3>View Inheritance</h3>
แถว 85: แถว 90:
 
<br/>
 
<br/>
 
[[ไฟล์:Odoo6.png|800px]]
 
[[ไฟล์:Odoo6.png|800px]]
 +
<br/><br/>
 +
*<h4>Domains</h4>
 +
แก้ไขไฟล์ดังนี้
 +
<br/><br/>
 +
openacademy/models.py
 +
<pre>
 +
    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",
 +
        domain=[('instructor', '=', True)])
 +
    course_id = fields.Many2one('openacademy.course',
 +
        ondelete='cascade', string="Course", required=True)
 +
    attendee_ids = fields.Many2many('res.partner', string="Attendees")
 +
</pre>
 +
<br/>
 +
เป็นการเพิ่มเงือนไขให้การเลือก instructor ให้กับ session โดยจะเลือกจาก partner ที่มี field instructor เป็น true
 +
<pre>
 +
    instructor_id = fields.Many2one('res.partner', string="Instructor",
 +
        domain=[('instructor', '=', True)])
 +
</pre>
 +
<br/><br/>
 +
สังเกตุได้จากการเลือก instructor ให้แต่ละ session
 +
[[ไฟล์:Odoo6-4.png|800px]]
 +
<br/><br/>
 +
ทำการแก้ไขค่า instructor ให้กับ partner โดยให้ค่าเป็น true แล้วบันทึก จะได้ผลลัพธ์ดังภาพ
 +
<br/>
 +
[[ไฟล์:Odoo6-5.png|800px]]
 +
<br/><br/>
 +
และทำการเลือก instructor ให้ session อีกครั้ง จะปรากฏ partner ที่มีสถานะ instructor เป็น true ขึ้นมาในตัวเลือก ดังภาพ
 +
<br/>
 +
[[ไฟล์:Odoo6-6.png|800px]]
 +
<br/><br/>
 +
<br/>
 +
*<h4>More complex domains</h4>
 +
แก้ไขไฟล์ดังนี้
 +
<br/><br/>
 +
openacademy/models.py
 +
<pre>
 +
        seats = fields.Integer(string="Number of seats")
 +
 +
    instructor_id = fields.Many2one('res.partner', string="Instructor",
 +
        domain=['|', ('instructor', '=', True),
 +
                    ('category_id.name', 'ilike', "Teacher")])
 +
    course_id = fields.Many2one('openacademy.course',
 +
        ondelete='cascade', string="Course", required=True)
 +
    attendee_ids = fields.Many2many('res.partner', string="Attendees")
 +
</pre>
 +
 +
<br/>
 +
ในส่วนนี้จะเป็นการปรับแก้ให้การเลือก instructor ให้กับ session
 +
<br/>
 +
จากเดิม <b>เลือกจาก partner ที่มีสถานะ instructor เป็น true</b>
 +
<br/>
 +
ปรับแก้เป็น
 +
<br/>
 +
<b>เลือกจาก partner ที่มีสถานะ instructor เป็น true "หรือ" partner ที่ติด tag Teacher</b>
 +
<pre>
 +
        domain=['|', ('instructor', '=', True),
 +
                    ('category_id.name', 'ilike', "Teacher")])
 +
</pre>
 +
ดังภาพ
 +
<br/>
 +
[[ไฟล์:Odoo6-8.png|800px]]
 +
<br/><br/>
 +
 +
openacademy/views/partner.xml
 +
<pre>
 +
<menuitem id="contact_menu" name="Contacts"
 +
                  parent="configuration_menu"
 +
                  action="contact_list_action"/>
 +
 +
        <record model="ir.actions.act_window" id="contact_cat_list_action">
 +
            <field name="name">Contact Tags</field>
 +
            <field name="res_model">res.partner.category</field>
 +
            <field name="view_mode">tree,form</field>
 +
        </record>
 +
 +
        <menuitem id="contact_cat_menu" name="Contact Tags"
 +
                  parent="configuration_menu"
 +
                  action="contact_cat_list_action"/>
 +
 +
        <record model="res.partner.category" id="teacher1">
 +
            <field name="name">Teacher / Level 1</field>
 +
        </record>
 +
        <record model="res.partner.category" id="teacher2">
 +
            <field name="name">Teacher / Level 2</field>
 +
        </record>
 +
 +
    </data>
 +
</openerp>
 +
</pre>
 +
 +
<br/>
 +
เป็นการเพิ่ม Tag Teacher / Level 1 และ Teacher / Level 2 ลงใน Contact Tags
 +
<br/>
 +
[[ไฟล์:Odoo6-2.png|800px]]
 +
<br/><br/>
 +
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 7 : Computed fields and default values]]

รุ่นแก้ไขปัจจุบันเมื่อ 05:14, 25 ตุลาคม 2559

Inheritance

  • Model Inheritance

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

openacademy/__init__.py

# -*- coding: utf-8 -*-
import controllers
import models
import partner


openacademy/partner/partner.py

# -*- coding: utf-8 -*-
from openerp import fields, models

class Partner(models.Model):
    _inherit = 'res.partner'

    # Add a new column to the res.partner model, by default partners are not
    # instructors
    instructor = fields.Boolean("Instructor", default=False)

    session_ids = fields.Many2many('openacademy.session',
        string="Attended Sessions", readonly=True)

class partner นี้เป็นการสืบทอด จาก res.partner และทำการเพิ่ม field instructor เป็นชนิด boolean เพื่อเก็บข้อมูลว่า partner เป็น ผู้สอนหรือไม่ และ session_ids เพื่อเชื่อมโยงไปยัง openacademy.session เพื่อเก็บข้อมูลว่า partner เข้าร่วมกับ session ใดบ้าง (Attended sessions) และ partner แต่ละคน สามารถเข้าร่วมได้หลาย session ดังภาพ

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



  • View Inheritance

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

openacademy/__openerp__.py

        # 'security/ir.model.access.csv',
        'templates.xml',
        'views/openacademy.xml',
        'views/partner.xml',
    ],
    # only loaded in demonstration mode
    'demo': [


openacademy/views/partner.xml

<?xml version="1.0" encoding="UTF-8"?>
 <openerp>
    <data>
        <!-- Add instructor field to existing view -->
        <record model="ir.ui.view" id="partner_instructor_form_view">
            <field name="name">partner.instructor</field>
            <field name="model">res.partner</field>
            <field name="inherit_id" ref="base.view_partner_form"/>
            <field name="arch" type="xml">
                <notebook position="inside">
                    <page string="Sessions">
                        <group>
                            <field name="instructor"/>
                            <field name="session_ids"/>
                        </group>
                    </page>
                </notebook>
            </field>
        </record>

        <record model="ir.actions.act_window" id="contact_list_action">
            <field name="name">Contacts</field>
            <field name="res_model">res.partner</field>
            <field name="view_mode">tree,form</field>
        </record>
        <menuitem id="configuration_menu" name="Configuration"
                  parent="main_openacademy_menu"/>
        <menuitem id="contact_menu" name="Contacts"
                  parent="configuration_menu"
                  action="contact_list_action"/>
    </data>
</openerp>



ทำการเพิ่มฟิลด์เข้าไปใน Form ของ partner (ที่ได้สืบทอดมา) ได้ผลลัพธ์ดังนี้

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



และทำการเพิ่ม Contact ใน menuitem ดังภาพ

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



  • Domains

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

openacademy/models.py

    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",
        domain=[('instructor', '=', True)])
    course_id = fields.Many2one('openacademy.course',
        ondelete='cascade', string="Course", required=True)
    attendee_ids = fields.Many2many('res.partner', string="Attendees")


เป็นการเพิ่มเงือนไขให้การเลือก instructor ให้กับ session โดยจะเลือกจาก partner ที่มี field instructor เป็น true

    instructor_id = fields.Many2one('res.partner', string="Instructor",
        domain=[('instructor', '=', True)])



สังเกตุได้จากการเลือก instructor ให้แต่ละ session

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



ทำการแก้ไขค่า instructor ให้กับ partner โดยให้ค่าเป็น true แล้วบันทึก จะได้ผลลัพธ์ดังภาพ

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



และทำการเลือก instructor ให้ session อีกครั้ง จะปรากฏ partner ที่มีสถานะ instructor เป็น true ขึ้นมาในตัวเลือก ดังภาพ

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




  • More complex domains

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

openacademy/models.py

        seats = fields.Integer(string="Number of seats")

    instructor_id = fields.Many2one('res.partner', string="Instructor",
        domain=['|', ('instructor', '=', True),
                     ('category_id.name', 'ilike', "Teacher")])
    course_id = fields.Many2one('openacademy.course',
        ondelete='cascade', string="Course", required=True)
    attendee_ids = fields.Many2many('res.partner', string="Attendees")


ในส่วนนี้จะเป็นการปรับแก้ให้การเลือก instructor ให้กับ session
จากเดิม เลือกจาก partner ที่มีสถานะ instructor เป็น true
ปรับแก้เป็น
เลือกจาก partner ที่มีสถานะ instructor เป็น true "หรือ" partner ที่ติด tag Teacher

        domain=['|', ('instructor', '=', True),
                     ('category_id.name', 'ilike', "Teacher")])

ดังภาพ

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



openacademy/views/partner.xml

	<menuitem id="contact_menu" name="Contacts"
                  parent="configuration_menu"
                  action="contact_list_action"/>

        <record model="ir.actions.act_window" id="contact_cat_list_action">
            <field name="name">Contact Tags</field>
            <field name="res_model">res.partner.category</field>
            <field name="view_mode">tree,form</field>
        </record>

        <menuitem id="contact_cat_menu" name="Contact Tags"
                  parent="configuration_menu"
                  action="contact_cat_list_action"/>

        <record model="res.partner.category" id="teacher1">
            <field name="name">Teacher / Level 1</field>
        </record>
        <record model="res.partner.category" id="teacher2">
            <field name="name">Teacher / Level 2</field>
        </record>

    </data>
</openerp>


เป็นการเพิ่ม Tag Teacher / Level 1 และ Teacher / Level 2 ลงใน Contact Tags

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



หัวข้อถัดไป Tutorial Odoo 9.0 Part 7 : Computed fields and default values