odoo-Action菜单

数据文件
Odoo是一个高度数据驱动的系统, 虽然使用Python代码来定制模块行为, 但很多模块数据是在其载入时setup的, 并且有些模块仅仅为Odoo添加数据.


通过数据文件来定义模块数据, 例如可以使用XML文件中的<record>元素定义数据, 每一个<record>元素创建或者更新数据库中的一条记录, 形式如下:
<openerp>
    <data>
        <record model="{model name}" id="{record identifier}">
            <field name="{a field name}">{a value}</field>
        </record>
    </data>
<openerp>


model:Odoo模型名.


id:外部ID(External Identifier), 通过它可以引用到记录(并且不需要知道记录所在的数据库ID).


元素:name属性用于确定字段名称(例如description), 其内容就是字段值.


数据文件必须在模块载入清单文件列表中, 也就是__openerp__.py的’data’列表(全部载入)或’demo’列表(只有设定为载入演示数据才会载入)中.




动作和菜单

触发三个方面事件:
1.通过点击菜单,链接到一个特定动作
2.点击视图中的按钮,链接到指定动作
3.作为一个对象的链接上下文操作


使用<menuitem>声明一个ir.ui.menu并将其连接到一个action, 可以用下面的形式的代码.
<record model="ir.actions.act_window" id="action_list_ideas">
    <field name="name">Ideas</field>
    <field name="res_model">idea.idea</field>
    <field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_ideas" parent="menu_root" name="Ideas" sequence="10"
          action="action_list_ideas"/>

注意: action必须先于menu的连接使用定义, 数据文件在载入时顺序地执行, 所以动作的ID必须首先存在于数据库中才能使用.


record属性:
model固定属性ir.actions.act_window
id 唯一
name 动作名称
res_model 对象
view_model 显示形式可以对调来优先显示不同视图


menuitem属性
id不能重名
parent 为上级菜单,如果菜单不在同一个XML要加上文件夹名称
name 界面上显示的文字
sequence 菜单排序
action 触发的事件


Action通常是执行XML文件中对应的菜单,因为action_id存在于数据库中,可以创建一个菜单到指定的Action上。

### 在 Odoo 15 中为菜单添加自定义功能的实现方法 在 Odoo 15 中,可以通过 XML 文件和 Python 文件的结合来创建自定义菜单并为其添加功能。以下是一个完整的实现流程,包括如何定义动作、视图以及将它们与菜单关联。 #### 1. 创建自定义模块 首先,确保已经创建了一个自定义模块。如果尚未创建,可以使用以下命令生成一个基础模块结构[^2]: ```bash python F:\repo\odoo\odoo-bin scaffold odoo_myapp F:\repo\myappfile ``` #### 2. 定义模型(可选) 如果需要为菜单提供数据支持,则需要定义一个模型。例如,在 `models` 文件夹中创建一个 Python 文件 `custom_model.py` 并定义模型: ```python from odoo import models, fields class CustomModel(models.Model): _name = 'custom.model' _description = 'Custom Model' name = fields.Char(string='Name', required=True) description = fields.Text(string='Description') ``` #### 3. 定义视图 在 `views` 文件夹中创建一个 XML 文件 `custom_view.xml`,定义表单或列表视图。例如: ```xml <record id="view_custom_form" model="ir.ui.view"> <field name="name">custom.model.form</field> <field name="model">custom.model</field> <field name="arch" type="xml"> <form string="Custom Model"> <sheet> <group> <field name="name"/> <field name="description"/> </group> </sheet> </form> </field> </record> <record id="view_custom_tree" model="ir.ui.view"> <field name="name">custom.model.tree</field> <field name="model">custom.model</field> <field name="arch" type="xml"> <tree string="Custom Model"> <field name="name"/> <field name="description"/> </tree> </field> </record> ``` #### 4. 定义窗口操作 在同一个 XML 文件中,定义一个窗口操作以关联视图: ```xml <record id="action_custom_model" model="ir.actions.act_window"> <field name="name">Custom Model</field> <field name="type">ir.actions.act_window</field> <field name="res_model">custom.model</field> <field name="view_mode">tree,form</field> </record> ``` #### 5. 添加菜单项 继续在同一 XML 文件中,定义菜单项并将窗口操作与之关联: ```xml <menuitem id="menu_custom_root" name="Custom Menu" sequence="1"/> <menuitem id="menu_custom_action" name="Custom Action" parent="menu_custom_root" action="action_custom_model" sequence="10"/> ``` #### 6. 配置 `__manifest__.py` 确保在模块的 `__manifest__.py` 文件中正确声明了视图文件: ```python 'data': [ 'views/custom_view.xml', ], ``` #### 7. 自定义页面(可选) 如果需要弹出自定义页面而不是标准视图,可以参考以下 XML 结构[^3]: ```xml <record id="action_custom_page" model="ir.actions.client"> <field name="name">Custom Page</field> <field name="tag">custom_page.demo</field> <field name="target">new</field> </record> <menuitem id="menu_custom_page" name="Custom Page" parent="menu_custom_root" sequence="20" action="action_custom_page"/> ``` #### 8. 批量操作或服务器动作(可选) 如果需要在菜单中添加按钮执行特定功能,可以定义服务器动作[^4]: ```xml <record id="action_custom_server" model="ir.actions.server"> <field name="name">Custom Server Action</field> <field name="type">ir.actions.server</field> <field name="model_id" ref="model_custom_model"/> <field name="state">code</field> <field name="code">if records: result = records.perform_custom_action()</field> </record> ``` 然后将其与菜单关联: ```xml <menuitem id="menu_custom_server" name="Custom Server Action" parent="menu_custom_root" sequence="30" action="action_custom_server"/> ``` --- ### 注意事项 - 确保所有 XML 文件中的 ID 唯一且符合命名规范。 - 如果继承现有模块的菜单,需使用 `inherit_id` 属性定位父视图[^5]。 - 在开发过程中,重启 Odoo 服务并更新模块以应用更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值