ผลต่างระหว่างรุ่นของ "Tutorial Odoo 9.0 Part 6 : Inheritance"
Sirawich (คุย | มีส่วนร่วม) |
Sirawich (คุย | มีส่วนร่วม) ล |
||
(ไม่แสดง 6 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 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> | ||
แถว 100: | แถว 105: | ||
attendee_ids = fields.Many2many('res.partner', string="Attendees") | attendee_ids = fields.Many2many('res.partner', string="Attendees") | ||
</pre> | </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/> | <br/> | ||
*<h4>More complex domains</h4> | *<h4>More complex domains</h4> | ||
แถว 118: | แถว 140: | ||
<br/> | <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 | openacademy/views/partner.xml | ||
<pre> | <pre> | ||
− | + | <menuitem id="contact_menu" name="Contacts" | |
parent="configuration_menu" | parent="configuration_menu" | ||
action="contact_list_action"/> | action="contact_list_action"/> | ||
แถว 130: | แถว 167: | ||
<field name="view_mode">tree,form</field> | <field name="view_mode">tree,form</field> | ||
</record> | </record> | ||
+ | |||
<menuitem id="contact_cat_menu" name="Contact Tags" | <menuitem id="contact_cat_menu" name="Contact Tags" | ||
parent="configuration_menu" | parent="configuration_menu" | ||
แถว 140: | แถว 178: | ||
<field name="name">Teacher / Level 2</field> | <field name="name">Teacher / Level 2</field> | ||
</record> | </record> | ||
+ | |||
</data> | </data> | ||
</openerp> | </openerp> | ||
แถว 145: | แถว 184: | ||
<br/> | <br/> | ||
− | + | เป็นการเพิ่ม Tag Teacher / Level 1 และ Teacher / Level 2 ลงใน Contact Tags | |
+ | <br/> | ||
[[ไฟล์:Odoo6-2.png|800px]] | [[ไฟล์: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