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