为了编辑方便,客户会经常要求 odoo 打开form 视图
默认为编辑状态 或者根据某些条件 为编辑状态
下面介绍两种方式进行
1、在form 初始化加载时进行拦截,设置属性打开编辑状态
FormView.include({
/***
* ,满足条件,form 视图打开时默认编辑
*/
init: function (parent, dataset, views, flags, options) {
var self = this;
var index = dataset.index;
var row_id = dataset.ids[index];
var res_model = '';
if (flags && flags.action) {
res_model = flags.action.res_model;
}
if (res_model && row_id) {
var clicks = new Model(res_model);
clicks.call('check_is_true', [res_model, row_id]).done(function (message) {
if (message) {
flags.initial_mode = 'edit';
flags.form = {'action_buttons': true, 'options': {'mode': 'edit'}};
}
});
}
self._super.apply(self, arguments);
}
});
2、在用户点击 行 时,进行拦截,然后判断增加属性 再跳转
ListView.List.include({
row_clicked: function (e) {
var self = this;
var index = self.dataset.index;
var row_id = self.dataset.ids[index];
var res_model;
var result = this._super.apply.bind(this._super, this, arguments);
if (self.options.action) {
res_model = self.options.action.res_model;
} else {
return result();
}
var clicks = new Model(res_model);
return clicks.call('check_is_true', [res_model, row_id]).done(function (message) {
if (message) {
var action = {
'type': 'ir.actions.act_window',
'res_model': self.options.action.res_model,
'res_id': row_id,
'views': [self.options.action.views[1]],
'view_mode': self.options.action.view_mode,
'target': self.options.action.target,
'flags': {'form': {'action_buttons': true, 'options': {'mode': 'edit'}}},
};
if (row_id) {
return self.view.do_action(action);
}
} else {
return result();
}
});
}
});