odoo11 定义Server Action定义

1、odoo11中定义action:

默认如下图:
在这里插入图片描述
需求:如果想要在增加一个‘标记完成’的按钮:
①、view代码中的实现:
在这里插入图片描述
页面展示效果如下图:
在这里插入图片描述
上述代码解释说明:
和其他所有在数据文件(XML)中定义的数据一样,首先是一个包含属性 id 和 model 的 标签,我们要定义的是 Server Action, 所以需要将 model 设置为 ir.actions.server,然后是对应 Server Action 模型下的一些字段:

model_id:当前的动作是在哪个模型上运行的
binding_model_id:绑定的模型,当前动作将会出现在绑定的模型的视图中
state:服务器动作的类型,总共有 4 种可选的类型,分别是 code(执行 Python 代码),object_create(创建一条新记录),object_write(更新记录),multi(执行多个动作)
code:对应 state 的类型 code,为当前动作运行时所要执行的 Python 代码

大家应该都留意到了在上面的定义中出现了一个属性 ref,如果我没有理解错,它应该是 reference 的缩写,它的值是一个外部 ID(external id),我们上面定义的这个动作的外部 ID 就是定义时添加的 id 属性的值 action_mark_todo_task_done,它指向一条具体的记录(就像 Many2one 字段一样)。

我们定义的所有模型都会在 ir.model.data 对应的表中存在相应的记录,这些模型的外部 ID 形如 model_model_name,其中 model_name 是将模型名 model.name 的 . 替换成 ,例如我们的 todo.task 模型的外部 ID 就是前缀 model 加上 todo_task 组成的 model_todo_task 了。

接下来我们再看到字段 code 里面的内容,在这里面我们有一些变量是可以直接使用的:

env:Odoo 的运行环境
model:动作触发时对应的 Odoo 模型实例
record:动作触发时对应的单个记录(如在表单视图中运行对应当前表单所指向的记录),可能是空的
records:动作触发时对应的记录集(如在列表视图中勾选多条记录触发,记录集指向这些选中的记录),可能是空的
Python 库:time, datetime, dateutil, timezone 时间相关的 Python 库
log:用来记录日志信息
Warning:通过 raise Warning('xxxxx') 抛出警告信息

猜你喜欢

转载自blog.csdn.net/weixin_42579328/article/details/88873658