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' ) ] ,