1、button和服务器动作
(1)button
如图1,在视图文件中定义需要的按钮,和单据的状态(用一个selection类型的字段定义出需要显示的状态)。对button的name链接到模型中的函数,state还没有学习其用法,string为该按钮想要显示的名字,type为按钮的类型,class选择odoo自己定义的样式。
简单的定义了一个改变单据状态的函数,没有进行其他的判定和约束,各方法分别对应按钮的方法,点击触发方法重新对status赋值,这样可以改变单据的状态显示,如图3 右侧的状态可以被按钮改变。
注:button过程中遇到的坑,如果在表头中也有一个status字段,那么header的样式将会变成如图4所示:
(2)服务器动作
看以前的代码发现了实现服务器动作的方法,模型中封装的方法与button类似,在视图文件中代码如图5,model类型为ir.actions.server,ref指向model_+_name,<field name="state">code</field>表明类型,在<field name="code"> </field>中写python代码;用<field name="binding_model_id" ref="model_pur_order"/>将该动作在odoo动作功能中显示出来,如图6所示
注:对服务器动作还不太了解,需要进一步验证。
2,多对一、一对多和多对多
Many-to-one字段向模型的数据表中添加了一列,存储关联记录的数据库ID。在数据库级别上,还会创建外键约束,确保保存的ID是对关联表中记录的有效引用 。对这些关联字段不会创建数据库索引,但这可通过添加 index=True 属性来进行完成。
One-to-many字段是many-to-one的反向关联,虽然它们像其它字段一样添加在模型中,在数据库中并没有实际的体现。他们仅是编程捷径,启用视图来展现这些关联记录列表。还可以用在联系主表和子表的字段,在主表中定义一个o2m类型的字段,在子表中再相应的定义m2o字段,这样就可以引用子表中的字段,形成带页签的视图样式。
Many-to-many关联也不会向模型数据表添加列。这类关联在数据库中使用中间关联表进行体现,其中有两列分别存储这两个关联的ID。在图书和作者之间添加新关联在这个关联表中使用图书ID和作者ID创建一条新记录。