在继承模块内的向导视图中添加字段
Add field in wizard view inside inherited module
我有一个带有 m2m 字段的向导,该字段显示 library.book 树。
在父模块视图中:
<field name='model'>library.return.wizard</field>
<field name='arch' type='xml'>
<form string="Return books">
<sheet>
<group>
<field name='book_ids'>
<tree>
<field name="name"/>
<field name="state"/>
<!--How to add date_return field here?-->
<!--<field name="date_return"/>-->
</tree>
</field>
</group>
</sheet>
</form>
</field>
另一个模块模型继承library.book,增加一个字段date_return.
class LibraryBook(models.Model):
_inherit = 'library.book'
date_return = fields.Date('Date to return')
我尝试像这样在向导视图中添加一个 date_return 字段,在子模块视图中:
<field name='model'>library.return.wizard</field>
<field name='arch' type='xml'>
<field name='book_ids' position="inside">
<tree>
<xpath expr="field[@name='state']" position="after">
<field name="date_return" />
</xpath>
</tree>
</field>
</field>
没用。在视图中解决它的正确方法是什么?
同样,我有一个模块继承了m2m字段模型,并在那里添加了一个字段,但是我无法获取该字段。
6 月 22 日更新:
inherit_id
绝对有帮助。父记录是 <record id='library_return_wizard_form' model='ir.ui.view'>
所以我的子视图使用 <field name="inherit_id" ref="my_library.library_return_wizard_form"/>
.
当我只使用元素定位器时,树小部件中呈现的唯一列是 state
。
<record id='library_return_wizard_form_add' model='ir.ui.view'>
<field name='name'>library.return.wizard.form.view.add</field>
<field name='model'>library.return.wizard</field>
<field name="inherit_id" ref="my_library.library_return_wizard_form"/>
<field name='arch' type='xml'>
<field name='book_ids' position="inside">
<tree>
<field name="state" position="after">
<field name="date_return"/>
</field>
</tree>
</field>
</field>
</record>
如果我尝试使用 xpath,则会出现 js 前端错误。
<record id='library_return_wizard_form_add' model='ir.ui.view'>
<field name='name'>library.return.wizard.form.view.add</field>
<field name='model'>library.return.wizard</field>
<field name="inherit_id" ref="my_library.library_return_wizard_form"/>
<field name='arch' type='xml'>
<field name='book_ids' position="inside">
<tree>
<xpath expr="//field[@name='book_ids']/tree/field[@name='state']" position="after">
<field name="date_return" />
</xpath>
</tree>
</field>
</field>
</record>
也许,只是也许这个 xpath 找不到该字段,但我对此表示怀疑。
完整错误:
TypeError: Cannot read property 'type' of undefined
at Class._renderBodyCell (http://localhost:8069/web/static/src/js/views/list/list_renderer.js:317:55)
at http://localhost:8069/web/static/src/js/views/list/list_renderer.js:593:25
at Function._.map._.collect (http://localhost:8069/web/static/lib/underscore/underscore.js:164:24)
at Class._renderRow [as _super] (http://localhost:8069/web/static/src/js/views/list/list_renderer.js:592:24)
at Class._renderRow (http://localhost:8069/web/static/src/js/views/list/list_editable_renderer.js:566:32)
at Class._renderRow (http://localhost:8069/web/static/src/js/core/class.js:123:38)
at Function._.map._.collect (http://localhost:8069/web/static/lib/underscore/underscore.js:164:24)
at Class._renderRows (http://localhost:8069/web/static/src/js/views/list/list_renderer.js:614:18)
at Class._renderRows (http://localhost:8069/web/static/src/js/views/list/list_editable_renderer.js:588:26)
at Class._renderRows (http://localhost:8069/web/static/src/js/core/class.js:123:38)
在 list_renderer.js 文件中,xpath node
具有除 expr
未定义之外的所有属性。
最终编辑:
我也应该删除这几个我在盯着这个文件看太久后没有注意到的元素。 Locator 或 xpath
应该放在 arch
.
中
<field name='book_ids' position="inside">
<tree>
您应该使用inherit_id
字段指定当前视图的父视图,默认情况下未设置。
您正试图找到名为 book_ids
的字段并向其添加一个树,该树具有用于定位 state
字段的 XPath 表达式。正确的做法是定位state字段,使用position属性来指定匹配的节点应该如何改变。
<record id="view_library_return_wizard_form" model="ir.ui.view">
<field name="name">library.return.wizard.form.inherit</field>
<field name="model">library.return.wizard</field>
<field name="inherit_id" ref="MODULE_NAME.FORM_VIEW_ID"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='book_ids']/tree/field[@name='state']" position="after">
<field name="date_return"/>
</xpath>
</field>
</record>
当使用元素定位器时,Odoo 将尝试找到第一个匹配的元素。您可以使用字段定位器来简化语法(如果只有一个 state
字段或者您需要定位第一个字段)。
<record id="view_library_return_wizard_form" model="ir.ui.view">
<field name="name">library.return.wizard.form.inherit</field>
<field name="model">library.return.wizard</field>
<field name="inherit_id" ref="MODULE_NAME.FORM_VIEW_ID"/>
<field name="arch" type="xml">
<field name="state" position="after">
<field name="date_return"/>
</field>
</field>
</record>
编辑::
继承规范由元素定位器组成,用于匹配父视图中的继承元素,以及将用于修改继承元素的子元素。
您只需在视图中包含以下表达式之一 arch
xpath:
<xpath expr="//field[@name='book_ids']/tree/field[@name='state']" position="after">
<field name="date_return"/>
</xpath>
字段:
<field name="state" position="after">
<field name="date_return"/>
</field>
我有一个带有 m2m 字段的向导,该字段显示 library.book 树。
在父模块视图中:
<field name='model'>library.return.wizard</field>
<field name='arch' type='xml'>
<form string="Return books">
<sheet>
<group>
<field name='book_ids'>
<tree>
<field name="name"/>
<field name="state"/>
<!--How to add date_return field here?-->
<!--<field name="date_return"/>-->
</tree>
</field>
</group>
</sheet>
</form>
</field>
另一个模块模型继承library.book,增加一个字段date_return.
class LibraryBook(models.Model):
_inherit = 'library.book'
date_return = fields.Date('Date to return')
我尝试像这样在向导视图中添加一个 date_return 字段,在子模块视图中:
<field name='model'>library.return.wizard</field>
<field name='arch' type='xml'>
<field name='book_ids' position="inside">
<tree>
<xpath expr="field[@name='state']" position="after">
<field name="date_return" />
</xpath>
</tree>
</field>
</field>
没用。在视图中解决它的正确方法是什么?
同样,我有一个模块继承了m2m字段模型,并在那里添加了一个字段,但是我无法获取该字段。
6 月 22 日更新:
inherit_id
绝对有帮助。父记录是 <record id='library_return_wizard_form' model='ir.ui.view'>
所以我的子视图使用 <field name="inherit_id" ref="my_library.library_return_wizard_form"/>
.
当我只使用元素定位器时,树小部件中呈现的唯一列是 state
。
<record id='library_return_wizard_form_add' model='ir.ui.view'>
<field name='name'>library.return.wizard.form.view.add</field>
<field name='model'>library.return.wizard</field>
<field name="inherit_id" ref="my_library.library_return_wizard_form"/>
<field name='arch' type='xml'>
<field name='book_ids' position="inside">
<tree>
<field name="state" position="after">
<field name="date_return"/>
</field>
</tree>
</field>
</field>
</record>
如果我尝试使用 xpath,则会出现 js 前端错误。
<record id='library_return_wizard_form_add' model='ir.ui.view'>
<field name='name'>library.return.wizard.form.view.add</field>
<field name='model'>library.return.wizard</field>
<field name="inherit_id" ref="my_library.library_return_wizard_form"/>
<field name='arch' type='xml'>
<field name='book_ids' position="inside">
<tree>
<xpath expr="//field[@name='book_ids']/tree/field[@name='state']" position="after">
<field name="date_return" />
</xpath>
</tree>
</field>
</field>
</record>
也许,只是也许这个 xpath 找不到该字段,但我对此表示怀疑。
完整错误:
TypeError: Cannot read property 'type' of undefined
at Class._renderBodyCell (http://localhost:8069/web/static/src/js/views/list/list_renderer.js:317:55)
at http://localhost:8069/web/static/src/js/views/list/list_renderer.js:593:25
at Function._.map._.collect (http://localhost:8069/web/static/lib/underscore/underscore.js:164:24)
at Class._renderRow [as _super] (http://localhost:8069/web/static/src/js/views/list/list_renderer.js:592:24)
at Class._renderRow (http://localhost:8069/web/static/src/js/views/list/list_editable_renderer.js:566:32)
at Class._renderRow (http://localhost:8069/web/static/src/js/core/class.js:123:38)
at Function._.map._.collect (http://localhost:8069/web/static/lib/underscore/underscore.js:164:24)
at Class._renderRows (http://localhost:8069/web/static/src/js/views/list/list_renderer.js:614:18)
at Class._renderRows (http://localhost:8069/web/static/src/js/views/list/list_editable_renderer.js:588:26)
at Class._renderRows (http://localhost:8069/web/static/src/js/core/class.js:123:38)
在 list_renderer.js 文件中,xpath node
具有除 expr
未定义之外的所有属性。
最终编辑:
我也应该删除这几个我在盯着这个文件看太久后没有注意到的元素。 Locator 或 xpath
应该放在 arch
.
<field name='book_ids' position="inside">
<tree>
您应该使用inherit_id
字段指定当前视图的父视图,默认情况下未设置。
您正试图找到名为 book_ids
的字段并向其添加一个树,该树具有用于定位 state
字段的 XPath 表达式。正确的做法是定位state字段,使用position属性来指定匹配的节点应该如何改变。
<record id="view_library_return_wizard_form" model="ir.ui.view">
<field name="name">library.return.wizard.form.inherit</field>
<field name="model">library.return.wizard</field>
<field name="inherit_id" ref="MODULE_NAME.FORM_VIEW_ID"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='book_ids']/tree/field[@name='state']" position="after">
<field name="date_return"/>
</xpath>
</field>
</record>
当使用元素定位器时,Odoo 将尝试找到第一个匹配的元素。您可以使用字段定位器来简化语法(如果只有一个 state
字段或者您需要定位第一个字段)。
<record id="view_library_return_wizard_form" model="ir.ui.view">
<field name="name">library.return.wizard.form.inherit</field>
<field name="model">library.return.wizard</field>
<field name="inherit_id" ref="MODULE_NAME.FORM_VIEW_ID"/>
<field name="arch" type="xml">
<field name="state" position="after">
<field name="date_return"/>
</field>
</field>
</record>
编辑::
继承规范由元素定位器组成,用于匹配父视图中的继承元素,以及将用于修改继承元素的子元素。
您只需在视图中包含以下表达式之一 arch
xpath:
<xpath expr="//field[@name='book_ids']/tree/field[@name='state']" position="after">
<field name="date_return"/>
</xpath>
字段:
<field name="state" position="after">
<field name="date_return"/>
</field>