Odoo:从one2many字段中的添加行打开完整的模型页面

Odoo:从one2many字段中的添加行打开完整的模型页面,odoo,odoo-12,Odoo,Odoo 12,我制作了一个自定义模型,我有一个one2many字段,在这里我单击“添加新行”,然后单击“搜索更多”,以查找我要添加的项目,如下图所示 我想要的是点击“添加新产品线”,整个产品页面就会出现,而不必抛出上一个流程Salam Ahmed 您可以创建一个函数,当您单击以创建新视图或从另一视图或页面获取数据时,该函数会将您直接带到产品页面,并指定给向导中的按钮。您可以扩展列表渲染器并覆盖以使用上下文中的条件打开“搜索更多”视图 下面的代码添加了一个新的小部件以打开搜索更多…链接并选择许多记录 odoo

我制作了一个自定义模型,我有一个one2many字段,在这里我单击“添加新行”,然后单击“搜索更多”,以查找我要添加的项目,如下图所示

我想要的是点击“添加新产品线”,整个产品页面就会出现,而不必抛出上一个流程

Salam Ahmed
您可以创建一个函数,当您单击以创建新视图或从另一视图或页面获取数据时,该函数会将您直接带到产品页面,并指定给向导中的按钮。您可以扩展
列表渲染器
并覆盖以使用上下文中的条件打开“搜索更多”视图

下面的代码添加了一个新的小部件以打开
搜索更多…
链接并选择许多记录

odoo.define('stack\u overflow.open\u list\u view',函数(require){
“严格使用”;
var pyUtils=require('web.py_utils');
var dialogs=require('web.view_dialogs');
var core=require('web.core');
var _t=核心;
var fieldRegistry=require('web.field_registry');
var listrender=require('web.listrender');
var AddManyFieldOne2ManyRenderer=ListRenderer.extend({
/**
*它将返回第一个可编辑的可见小部件
*
*@私人
*@returns{Class}小部件返回第一个小部件
*/
_getFirstWidget:函数(){
var记录=this.state.data[this.currentRow];
var recordWidgets=this.allFieldWidgets[record.id];
var firstWidget=\ uu0.chain(recordWidgets).filter(函数(小部件){
瓦伊斯拉斯特=
小部件.$el.is(“:可见”)&&
(
widget.$('input').length>0 | | widget.tagName=='input'||
widget.$('textarea')。长度>0 | | widget.tagName=='textarea'
) &&
!widget.$el.hasClass('o_readonly_modifier');
返回isLast;
}).first().value();
返回第一个窗口小部件;
},
添加行:函数(行、字段名称){
var self=这个;
如果(lines.length>0){
self.trigger\u up('add\u record'{
上下文:[{[field_name]:行[0]}],
强制编辑:“底部”,
allowWarning:没错,
onSuccess:函数(){
self.unelectrow();
lines.shift();//添加行后删除第一个元素
添加行(行、字段名称);
}
});
}
},
_OnAddressRecord:功能(ev){
//我们不希望浏览器导航到#url
ev.preventDefault();
//我们不希望单击造成其他影响,例如取消选择
//我们正在创建的行,因为它算作对tr的单击
ev.stopPropagation();
var self=这个;
//但我们确实希望取消选择当前行
this.unelectrow().then(函数(){
var context=ev.currentTarget.dataset.context;
if(context&&pyUtils.py\u eval(context.open\u列表\u视图){
//触发add_记录以获取字段名和模型
//如果在上下文中传递字段名和模型,则不需要触发add_记录
self.trigger\u up('add\u record'{
上下文:[{}],
onSuccess:函数(){
var widget=self._getFirstWidget();
var field_name='default_'+widget.name;
var模型=widget.field.relation;
self.unelectrow();
自我保护({
模型:模型,
方法:'搜索',
参数:[[]],
}).那么(
功能(结果){
返回新对话框。选择CreateDialog(self,2;.extend({},self.nodeOptions{
res_模型:模型,
上下文:上下文,
标题:_t(“搜索:添加行”),
初始ID:结果,
初始视图:“搜索”,
禁用\u多个\u选择:false,
no_create:!self.can_create,
在所选设备上:功能(记录){
添加行(records.map(product=>product.id)、字段名称);
}
})).open();
});
}
});
}否则{
trigger_up('add_record',{context:context&&[context]});
}
});
},
});
var AddManyFieldOne2Many=fieldRegistry.map.section_和_note_one2many.extend({
/**
*我们希望对列表使用自定义渲染器。
*
*@覆盖
*/
_getRenderer:函数(){
if(this.view.arch.tag==='tree'){
返回addManyFieldDone2ManyRenderer;
}
返回此参数。\u super.apply(此参数为参数);
},
});
fieldRegistry.add('add_many_one2many',addmanyFieldDone2many');
});
要使用它,请定义one2Many字段的widget属性以

<field name="field_name" widget="add_many_one2many"...

到目前为止您尝试了什么?你能用你的努力更新你的问题吗?这就是我停下来的地方,我试着用谷歌搜索它,但没有其他东西,你知道我该怎么做吗
<create string="Open list view" context="{'open_list_view': True}"/>