Openerp/module 2
ไปยังการนำทาง
ไปยังการค้นหา
Note & Category
ไฟล์จากครั้งก่อน
easynote.py
from osv import osv, fields
class Category(osv.Model):
_name = 'easynote.category'
_columns = {
'name': fields.char('Name', size=50, required=True),
'note_ids': fields.one2many('easynote.note', 'category_id', 'Notes')
}
class Note(osv.Model):
_name = 'easynote.note'
_rec_name = 'title'
_columns = {
'title': fields.char('Title', size=100, required=True),
'body': fields.text('Body', required=True),
'number': fields.integer('Number'),
'category_id': fields.many2one('easynote.category', 'Category'),
}
easynote_view.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="view_easynote_note_tree">
<field name="name">easynote.note.tree</field>
<field name="model">easynote.note</field>
<field name="arch" type="xml">
<tree string="Note">
<field name="title"/>
<field name="body"/>
<field name="number"/>
<field name="category_id"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_easynote_note_form">
<field name="name">easynote.note.form</field>
<field name="model">easynote.note</field>
<field name="arch" type="xml">
<form string="Note" version="7.0" class="oe_form_nomargin">
<field name="title" />
<field name="body" widget="html" class="oe_memo" editor_height="100px" />
<field name="number"/>
<field name="category_id"/>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_easynote_note">
<field name="name">EasyNotes</field>
<field name="res_model">easynote.note</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_open_true':True}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a note. blah blah
</p>
<p>
Use notes to organize personal tasks or notes.
</p>
</field>
</record>
<record model="ir.ui.view" id="view_easynote_category_tree">
<field name="name">easynote.category.tree</field>
<field name="model">easynote.category</field>
<field name="arch" type="xml">
<tree string="Categry">
<field name="name"/>
<field name="note_ids"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_easynote_category_form">
<field name="name">easynote.category.form</field>
<field name="model">easynote.category</field>
<field name="arch" type="xml">
<form string="Category">
<field name="name"/>
<field name="note_ids"/>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_easynote_category">
<field name="name">Category</field>
<field name="res_model">easynote.category</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_open_true':True}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a category.
</p>
</field>
</record>
<menuitem name="Notes" id="menu_easynote_top"
parent="" sequence="1"
action="easynote.action_easynote_note"/>
<menuitem name="Your Notes" id="menu_easynote_main"
parent="menu_easynote_top" sequence="1"/>
<menuitem name="Notes" id="menu_easynote_note"
parent="menu_easynote_main" sequence="1"
action="easynote.action_easynote_note"/>
<menuitem name="Categories" id="menu_easynote_category"
parent="menu_easynote_main" sequence="2"
action="easynote.action_easynote_category"/>
</data>
</openerp>
onchange
ใน easynote_view.xml
<record model="ir.ui.view" id="view_easynote_note_form">
...
<field name="arch" type="xml">
<form string="Note" version="7.0">
<field name="title" on_change="onchange_note_title(title)"/>
...
</form>
</field>
</record>
การระบุดังกล่าวจะทำให้เมื่อข้อมูลในฟอร์มในฟิลด์นั้นมีการเปลี่ยนแปลง จะมีการเรียกเมท็อด onchange_note_title ที่โมเดล
def onchange_note_title(self, cr, uid, ids, title):
pass
พารามิเตอร์ cr, uid, ids นั้นจะเป็นพารามิเตอร์ที่ส่งให้โดยอัตโนมัติ ส่วน title นั้น มาจากที่เราระบุใน attribute on_change ด้านบน
เมท็อดดังกล่าวสามารถประมวลผลแล้วส่งค่าคืนได้หลายแบบ อ่านเพิ่มได้จากเอกสารส่วน onchange
action / ORM methods
ในฟอร์ม เราสามารถเพิ่มปุ่มและกำหนดกิจกรรม (action) ให้กับปุ่มนั้นได้ (เอกสาร openerp) โดยใน xml ที่ระบุฟอร์ม เราสามารถเพิ่มปุ่มเช่น
<button name="action_test_action" type="object" string="Test"/>
โดยที่
- type ที่ระบุเป็น object หมายถึงให้เรียกใช้เมท็อดในคลาสของโมเดล
- name จะระบุชื่อเมท็อดที่ต้องการเรียกให้ทำงาน
จากตัวอย่างข้างต้น ในโมเดลเราจะระบุเมท็อด
def action_test_action(self, cr, uid, ids, context=None):
pass
ในการทำงานกับโมเดล สามารถดู methods ของ ORM ได้จากเอกสารที่แจก
states
class Note(osv.Model):
_name = 'easynote.note'
_rec_name = 'title'
_columns = {
'title': fields.char('Title',
size=100,
required=True,
states={'confirmed': [('readonly', True)]}),
'body': fields.text('Body', required=True),
'number': fields.integer('Number'),
'category_id': fields.many2one('easynote.category', 'Category'),
'state': fields.selection([('draft','Draft'),
('confirmed','Confirmed')],
'State',
required=True,
readonly=False),
}
_defaults = {
'state': 'draft',
}