odoo 向导、按钮弹窗、菜单弹窗、表单右上角按钮跳转

15 篇文章 4 订阅
15 篇文章 1 订阅
odoo 向导
向导是瞬时模型,不储存数据
class DemoWizard(models.TransientModel):
    _name = 'demo.wizard'

	name = fields.Char('示例')
无需 tree 视图, form 视图同普通表单视图,action视图如下
<record id="act_demo_wizard_view" model="ir.actions.act_window">
            <field name="name">示例</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">demo.wizard</field>
            <field name="view_mode">form</field>
            <field name="target">new</field>
            <field name="binding_model_id" ref="模块文件名.模型名"/>
            <field name="help" type="html">
              <p class="oe_view_nocontent_create">
                <!-- Add Text Here -->
              </p><p>
                <!-- More details about what a user can do with this object will be OK -->
              </p>
            </field>
        </record>

		<menuitem id="demo_wizard_menu" 
                  name="示例" 
		          parent="示例"
                  groups="用户组"
                  action="act_demo_wizard_view"/>
target : 定义视图打开模式  在当前视图上打开(current)、使用全屏模式(fullscreen)、新窗口打开(new),main可代替current来清除导航
binding_model_id  : 用 ref = "" 指定插入在模型 的动作里面
menuitem : 也可绑定到菜单上实现点击菜单弹窗
绑定到动作中根据单选框勾选记录显示,对应的方法如下
@api.multi
def demo(self)
	active_ids = self,_context.get('active_id')
	records = self.env['demo.demo'].browse(active_id)
	for rec in records:
		print(rec.name)
也可以按钮跳转窗口,自己指定传值,通过context,代码如下
@api.multi
    def assign_barcode(self):
        action = self.env.ref('action视图外部id').read()[0]
        action['context'] = {'id': self.id, 'type': self.type}
        return action
对应接收方法格式为: self._context.get('id')
也可定义在字段之中 default=lambda self: self._context.get('type')
当前用户是 self.env.user , 实用性强,各个地方可用
跳转视图 : self.env.ref('视图id')
表单右上角按钮弹窗
方法与视图如下,参考于 销售订单表单的发货单按钮, button 直接加上"confirm"属性,就可以实现,点击按钮的时候,弹出窗口,提示“是否确认操作”的提示框
@api.multi
    def demo(self):
        record = len(self.demo_ids)
        action = self.env.ref('action视图id').read()[0]
        if record >= 1:
            action['views'] = [(self.env.ref(form视图id').id, 'form')]
            action['res_id'] = self.demo_ids.filtered(lambda x: x.type == '1').ids[0]
        else:
            action = {'type': 'ir.actions.act_window_close'}
        return action

						<!--           表单按钮   写在sheet下       -->
						<div class="oe_button_box" name="button_box">
                            <button name="action_view_barcode_bind" type="object"
                                    class="oe_stat_button" icon="fa-arrow-right"/>
                                <div class="o_field_widget o_stat_info">
                                    <span class="o_stat_value" widget="statinfo">
                                        <field name="demo" widget="statinfo" nolabel="1" class="mr4" readonly="1"
                                               attrs="{'invisible': [('barcode_bind_state', '!=', 'wait')]}"/>
                                        <field name="state" nolabel="1" class="mr4" readonly="1"  style="color: green"/>
                                    </span>
                                    <span class="o_stat_text">条码绑定</span>
                                </div>
                            </button>
                        </div>
action 中的内容,可用于直接return 打开视图,或者write 修改,没这么多参数,一般参数 type, view_type, view_mode, res_model, views, view_id, target, context, 就可以打开form视图,或者向导弹窗
{'id': 790, 
'name': 'demo',
 'type': 'ir.actions.act_window', 
 'view_id': False, 
 'domain': "[('type', '=', '1')]", 
 'context': "{'default_type': '1'}",
 'res_id': 80, 
 'res_model': 'demo',
 'src_model': False, 
 'target': 'current', 
 'view_mode': 'tree,form', 
 'view_type': 'form', 
 'usage': False, 
 'view_ids': [], 
 'limit': 80, 
 'groups_id': [], 
 'search_view_id': False, 
 'filter': False, 
 'auto_search': True, 
 'multi': False, 
 'binding_model_id': False, 
 'binding_type': 'action', 
 'create_uid': (1, 'OdooBot'), 
 'create_date': datetime.datetime(2020, 5, 19, 1, 28, 53, 91830), 
 'write_uid': (1, 'OdooBot'), 
 'write_date': datetime.datetime(2020, 7, 14, 6, 49, 28, 57250), 
 'views': [(2079, 'form')], 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值