ผลต่างระหว่างรุ่นของ "Tutorial Odoo 9.0 Part 5 : Relations between models"
จาก Morange Wiki
Bombay (คุย | มีส่วนร่วม) |
Bombay (คุย | มีส่วนร่วม) (→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