如何在Odoo中创建固定行静态树视图:首列硬编码,其余列可编辑
在Odoo中创建固定行数列的可编辑Tree视图
要实现固定行数、首列硬编码预设值、其余列可编辑的Tree视图,可通过以下步骤完成:
1. 定义业务模型
创建包含三个字段的模型,首列设为只读存储固定值,另外两个字段设为可编辑状态:
from odoo import models, fields, api class CustomStaticTable(models.Model): _name = 'custom.static.table' _description = '固定行静态表格' fixed_value = fields.Char(string='固定值', readonly=True) editable_field1 = fields.Char(string='可编辑字段1', required=True) editable_field2 = fields.Float(string='可编辑字段2', required=True) def generate_fixed_rows(self): """生成固定行数的记录,首列使用预设值""" # 可选:清空现有记录(根据业务需求决定是否保留历史数据) # self.unlink() # 预设的固定值列表,对应每行的首列内容 preset_values = ['行1', '行2', '行3'] for val in preset_values: self.create({ 'fixed_value': val, 'editable_field1': '', 'editable_field2': 0.0 }) # 刷新视图显示新生成的行 return {'type': 'ir.actions.act_window_ref', 'ref': 'action_custom_static_table'}
2. 配置Tree视图
创建可编辑Tree视图,添加自定义按钮生成固定行,同时设置首列字段为只读:
<odoo> <!-- Tree视图定义 --> <record id="view_custom_static_table_tree" model="ir.ui.view"> <field name="name">custom.static.table.tree</field> <field name="model">custom.static.table</field> <field name="arch" type="xml"> <tree editable="bottom"> <header> <!-- 自定义按钮触发固定行生成 --> <button name="generate_fixed_rows" string="生成固定行" type="object" class="oe_highlight" /> </header> <field name="fixed_value" readonly="1"/> <field name="editable_field1"/> <field name="editable_field2"/> </tree> </field> </record> <!-- 动作定义 --> <record id="action_custom_static_table" model="ir.actions.act_window"> <field name="name">固定行静态表格</field> <field name="res_model">custom.static.table</field> <field name="view_mode">tree</field> <field name="view_id" ref="view_custom_static_table_tree"/> </record> <!-- 菜单入口 --> <menuitem id="menu_custom_static_table" name="固定行静态表格" parent="base.menu_custom" action="action_custom_static_table" /> </odoo>
3. 功能说明
- 进入视图后,点击生成固定行按钮,系统自动创建预设行数的记录,首列显示硬编码的固定值(如"行1"、"行2"、"行3");
- 第二、第三列为可编辑状态,用户可直接输入内容;
- 编辑完成后,点击Tree视图的保存按钮(或按回车),系统保存包含三列数据的所有记录;
- 如需调整固定行数,修改模型
generate_fixed_rows方法中的preset_values列表即可。
可选优化
- 若希望打开视图时自动生成固定行,可在模型的
default_get方法或视图的on_load事件中调用generate_fixed_rows; - 若需限制用户手动添加/删除行,可在Tree视图中设置
create="false"和delete="false",仅通过自定义按钮控制行的生成。
内容的提问来源于stack exchange,提问作者Atiq Baqi
相关产品推荐
相关产品推荐

