咨询:点击Odoo treeView中“add a line”按钮触发的方法
Odoo树形视图(Tree View)点击“添加行”按钮的调用方法解析
前端触发逻辑
- 普通独立树形视图:点击“添加行”按钮时,前端核心调用Odoo Web框架中
web.ListController类的_onAddRecord方法。该方法会先在前端创建一条空本地记录,待用户填写字段并触发保存后,才向后端发起请求。 - 关联字段内嵌树形视图(如One2many字段的子视图):此时触发
web.One2manyField控制器下的_addRecord方法,该方法会处理关联记录的创建逻辑,通常携带主记录的关联ID,确保子记录与主记录绑定。
无论哪种场景,前端准备好记录数据后,最终都会调用_createRecord方法发起后端请求。
后端处理方法
- 前端请求最终会落到对应模型的
create方法上。独立树形视图直接调用当前模型的create;One2many内嵌视图则调用子模型的create方法,并传入主记录的关联字段值(如parent_id)。 - 若需自定义创建行为,可直接重写模型的
create方法,示例如下:
class MyModel(models.Model): _name = 'my.model' def create(self, vals): # 添加自定义逻辑,比如设置默认值 vals.setdefault('status', 'draft') return super(MyModel, self).create(vals)
自定义前端行为示例
如果需要修改点击“添加行”时的前端逻辑,可通过继承并重写ListController的_onAddRecord方法实现:
odoo.define('custom_module.custom_list_controller', function(require) { 'use strict'; const ListController = require('web.ListController'); ListController.include({ _onAddRecord: function () { // 自定义操作,比如添加日志或预设字段值 console.log('触发添加行操作'); // 调用原方法保留默认行为 this._super(...arguments); } }); return ListController; });
内容的提问来源于stack exchange,提问作者GNETO DOMINIQUE
相关产品推荐
相关产品推荐

