向导(Wizards)

​​​点我下载完整odoo的demo​


​python学习手册大全点我下载​

在odoo中通过使用向导(Wizard)创建一个表单与用户进行交互。向导的model使用TransientModel定义,TransientModel继承自Model,并有下面的特殊功能:

1 保存在TransientModel的记录会在提交完成后自动清理

2 wizard记录没有必要指定访问权限,默认所有用户都可以访问。

3 wizard记录中的字段可以通过many2one指向wizard对象或普通的model对象, 普通的model对象不能通过many2one指向wizard对象

下面我们将创建向导供用户来快速添加上课学生到课时中。

创建wizard

定义一个wizard,让用户批量的添加某节课时的上课学生。

在 myproject/my_first_app下创建一个文件夹wizard,然后在里面创建四个文件​​__init__.py​​、actions_menu.xml、myproject_wizard_view.xml和myproject_wizard.py。

在​​myproject/my_first_app/wizard/__init__.py​​中添加:

# -*- coding: utf-8 -*-
from . import myproject_wizard

在​​myproject/my_first_app/__manifest__.py​​中允许访问这个文件:

'data': [
'security/myproject_security.xml',
'security/ir.model.access.csv',
'data/course_data.xml',
'data/session_data.xml',
'views/menu_views.xml',
'views/course_views.xml',
'views/session_views.xml',
'views/res_partner_views.xml',
'wizard/myproject_wizard_view.xml',
'wizard/actions_menu.xml',
],

在​​myproject/my_first_app/__init__.py​​导入wizard:

# -*- coding: utf-8 -*-
from . import controllers
from . import models
from . import wizard

myproject/my_first_app/wizard/myproject_wizard.py

# -*- coding: utf-8 -*-
from odoo import models, fields, api
class MyprojectWizard(models.TransientModel):
_name = 'myproject.wizard'
_description = '添加参与者'
session_id = fields.Many2one('myproject.session', string="讲座", required=True)
attendee_ids = fields.Many2many('res.partner', string="参与者")
def subscribe(self):
self.session_id.attendee_ids |= self.attendee_ids
return {}
@api.model
def default_get(self, fields):
result = super(MyprojectWizard, self).default_get(fields)
result['session_id'] = self.env.context.get('active_id')
return result

myproject/my_first_app/wizard/myproject_wizard_view.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="wizard_form_view" model="ir.ui.view">
<field name="name">myproject.wizard.view.form</field>
<field name="model">myproject.wizard</field>
<field name="arch" type="xml">
<form string="添加参与者">
<sheet>
<group>
<field name="session_id"/>
<field name="attendee_ids"/>
</group>
</sheet>
<footer>
<button string="取消" class="oe_link" special="cancel"/>
<!--                        type选择object,type  值可以是 workflow, object action   默认是 workflow-->
<!--                        name是需要定义的方法名-->
<button string="添加"  name="subscribe" type="object" class="oe_highlight" />
</footer>
</form>
</field>
</record>
<record id="myproject_wizard_action_form" model="ir.actions.act_window">
<field name="name">添加参与者</field>
<field name="res_model">myproject.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record id="action_wizard" model="ir.actions.act_window">
<field name="name">添加参与者</field>
<field name="res_model">myproject.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{
'default_composition_mode': 'comment',
'default_res_id': active_id,
}</field>
<field name="binding_model_id" ref="my_first_app.model_myproject_session"/>
<field name="binding_view_types">form</field>
</record>
</odoo>

myproject/my_first_app/wizard/actions_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Add action entry in the Action Menu for Leads -->
<record id="action_wizard" model="ir.actions.act_window">
<field name="name">添加参与者</field>
<field name="res_model">myproject.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{
'default_composition_mode': 'comment',
'default_res_id': active_id,
}</field>
<field name="binding_model_id" ref="my_first_app.model_myproject_session"/>
<field name="binding_view_types">form</field>
</record>
</odoo>

启动向导

1 定义向导显示的form视图

2 在contextual actions中调用此向导

3 定义向导模型中session_id的默认值,通过self._context中active_id获取

active_id为当前form的所显示模型的id,通过模型的browse方法,就可以获取到这个记录的对象了

更新应用后,效果如下:

11、odoo的向导页面_xml

点我下载完整odoo的demo

参考:

​https://www.odoo.com/documentation/10.0/howtos/backend.html#wizards​

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。


如果文章对您有帮助,请我喝杯咖啡吧!

公众号

11、odoo的向导页面_公众号_02


关注我,我们一起成长~~