手把手教你在7.0下开发wizard【多亏了总监指导,大家一起感谢他】
-
首先,先安装前两个模块,即oecn_training与oecn_training_classroom
oecn_training_classroom_wizard是基于oecn_training_classroom改写的,当然你也可以直接装oecn_training与oecn_training_classroom_wizard.zip!
效果图见附件。
wizard主要是定义一个osv_memory类,视图上加一个target,其他跟正常的view没啥区别。
现在说下怎么基于oecn_training_classroom定义wizard
首先,在oecn_training_classroom下写一个class,我是在classroom.py里写的。当然不一定写在同一个文件里。代码如下:# -*- coding: utf-8 -*-<br />from openerp.osv import fields, osv<br /> <br />class oecn_training_classroom(osv.osv):<br /> _name = 'oecn.training.classroom'<br /> _description = u'OECN 教室'<br /> _columns = {<br /> 'number':fields.char(u'编号', size=64, select=True),<br /> 'capacity':fields.integer(u'容纳人数', select=True),<br /> 'location':fields.char(u'地点', size=125, select=True),<br /> 'room_ids':fields.many2many('oecn.training.classroom.wizard', <br /> 'classroom_many2many', <br /> 'class_room_id','room_id', string='room'}<br /> }<br />class oecn_training_classroom_wizard(osv.osv_memory):<br /> _name = 'oecn.training.classroom.wizard'<br /> _description = u'OECN 教室2'<br /> _columns = {<br /> 'p_number':fields.integer(u'容纳人数', select=True),<br /> 'class_room_ids':fields.many2many('oecn.training.classroom', 'classroom_many2many', <br /> 'room_id', 'class_room_id', string='room'<br /> }<br /> def act_done(self, cr, uid, ids, context=None):<br /> raise osv.except_osv(_('Error!'), _('Set OK!'))<br /> <br /> <br />oecn_training_classroom()<br />oecn_training_classroom_wizard()<br />
其中最关键的继承osv.osv_memory类
xml里添加如下代码:<!--定义表单视图--><br /> <record model="ir.ui.view" id="oecn_training_classroom_wizard_form_view"><br /> <field name="name">课程表单</field><br /> <field name="type">form</field><br /> <field name="model">oecn.training.classroom.wizard</field><br /> <field name="arch" type="xml"><br /> <form string="课程表单" version="7.0"><br /> <button name="act_done" string="Set It!" type="object"/><br /> <field name="p_number"/><br /> <field name="class_room_ids" widget="many2many_tags"/><br /> </form><br /> </field><br /> </record><br /> <!--定义列表视图--><br /><!--定义视图动作--><br /> <record model="ir.actions.act_window" id="action_oecn_training_classroom_wizard"><br /> <field name="name">课程</field><br /> <field name="res_model">oecn.training.classroom.wizard</field><br /> <field name="view_type">form</field><br /> <field name="view_mode">form,tree</field><br /> <field name="view_id" ref="oecn_training_classroom_wizard_form_view"/><br /> <field name="target">new</field><br /> </record><br /><!--定义菜单--><br /> <menuitem id="oecn_menu" name="OECN"/><br /> <menuitem id="oecn_training_menu" name="OECN Training" parent="oecn_menu"/><br /> <menuitem id="oecn_training_classroom_wizard_menu2" name="OECN Training Lesson2" parent="oecn_training_menu" action="action_oecn_training_classroom_wizard"/>
注意几点,wizard不需要tree视图,另外,需要在视图动作下加上<field name="target">new</field>。
这样wizard就出现了,然后可以根据业务逻辑添加自己想要的功能。。
貌似没有其他的了。。wizard只会挡门外汉,进来了发现没那么难。。