在继承模块内的向导视图中添加字段

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 未定义之外的所有属性。

最终编辑:

我也应该删除这几个我在盯着这个文件看太久后没有注意到的元素。 Locatorxpath 应该放在 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>