无法继承Odoo主题模板
Can't Inherit Odoo theme template
我有一个名为 theme_test 的基本主题
这是模板代码(此模板已添加到清单数据中)。
<template id="product_catg_test" name="Product Category">
<t t-if="categories">
<code for print category>
</t>
</template>
所以我创建了一个名为 test_theme_extended 的扩展模块,并尝试了两种继承方法来替换 t-if 条件
- 第一种方法(我在清单的数据中添加了这个文件)
<template id="product_catg_test_extended" inherit_id="theme_test.product_catg_test" name="Test">
<xpath expr="//t[@t-if='categories']" position="replace"></xpath>
</template>
第一种方法出错
odoo.tools.convert.ParseError: "Element '' cannot be located in parent view
- 第二种方法(我在清单中的 QWEB 中添加了这个文件)
<t t-extend="theme_test.product_catg_test">
<t t-jquery="t[t-if='categories']" t-operation="replace"/>
</t>
这也不起作用。
我认为主视图是从主题创建的,它没有外部 ID,这就是我遇到这个问题的原因。但是如何继承扩展模块中的基础主题视图呢?
目前我正在为完全相同的问题而苦苦挣扎。到目前为止,在调试负责查找的代码时,我想知道为什么父视图的内容与 xml 显示的内容不同。
长话短说:主题模块中的模板不是存储为ir.ui.view而是主题。ir.ui.view。该代码将使用错误的 ID 进行查找,因为它需要常规视图 - 要么找到错误的常规视图,要么一无所获。
不幸的是,我没有找到任何修改主题的解决方案。ir.ui.view - 如果有人有解决方案,我将不胜感激 she/he 与我们分享。
似乎修改主题的唯一方法是编辑原始 xml 个文件。
更新:
我尝试使用不同的方法,例如继承表单视图 (
如果您要继承一个主题,它必须来自另一个主题,或者使用记录而不是模板。
定义主题,如主题前缀和主题类别
由于模块主题在主题 ir_ui_view 中创建视图并在 ir_ui_view
中创建没有 XMLID 的副本
并且普通模块在 ir_ui_view
中创建视图
因此,如果您想从普通模块 (ir_ui_view) 修改视图主题 (theme_ir_ui_view),那么实际上它不会找到该元素,因为它在另一个 table
但是如果你还想尝试你可以这样继承,继承没有XML的副本所以你必须通过key来继承
<record id="product_catg_test_extended" model="ir.ui.view">
<field name="name">product_catg_test_extended</field>
<field name="inherit_id" search="[('key', '=', 'theme_test.product_catg_test')]"/>
<field name="type">qweb</field>
<field name="key">test_theme_extended.product_catg_test_extended</field>
<field name="arch" type="xml">
<xpath expr="//t[@t-if='categories']" position="replace"></xpath>
</field>
</record>
我有一个名为 theme_test 的基本主题 这是模板代码(此模板已添加到清单数据中)。
<template id="product_catg_test" name="Product Category">
<t t-if="categories">
<code for print category>
</t>
</template>
所以我创建了一个名为 test_theme_extended 的扩展模块,并尝试了两种继承方法来替换 t-if 条件
- 第一种方法(我在清单的数据中添加了这个文件)
<template id="product_catg_test_extended" inherit_id="theme_test.product_catg_test" name="Test">
<xpath expr="//t[@t-if='categories']" position="replace"></xpath>
</template>
第一种方法出错
odoo.tools.convert.ParseError: "Element '' cannot be located in parent view
- 第二种方法(我在清单中的 QWEB 中添加了这个文件)
<t t-extend="theme_test.product_catg_test">
<t t-jquery="t[t-if='categories']" t-operation="replace"/>
</t>
这也不起作用。
我认为主视图是从主题创建的,它没有外部 ID,这就是我遇到这个问题的原因。但是如何继承扩展模块中的基础主题视图呢?
目前我正在为完全相同的问题而苦苦挣扎。到目前为止,在调试负责查找的代码时,我想知道为什么父视图的内容与 xml 显示的内容不同。
长话短说:主题模块中的模板不是存储为ir.ui.view而是主题。ir.ui.view。该代码将使用错误的 ID 进行查找,因为它需要常规视图 - 要么找到错误的常规视图,要么一无所获。
不幸的是,我没有找到任何修改主题的解决方案。ir.ui.view - 如果有人有解决方案,我将不胜感激 she/he 与我们分享。
似乎修改主题的唯一方法是编辑原始 xml 个文件。
更新:
我尝试使用不同的方法,例如继承表单视图 (
如果您要继承一个主题,它必须来自另一个主题,或者使用记录而不是模板。
定义主题,如主题前缀和主题类别
由于模块主题在主题 ir_ui_view 中创建视图并在 ir_ui_view
中创建没有 XMLID 的副本并且普通模块在 ir_ui_view
中创建视图因此,如果您想从普通模块 (ir_ui_view) 修改视图主题 (theme_ir_ui_view),那么实际上它不会找到该元素,因为它在另一个 table
但是如果你还想尝试你可以这样继承,继承没有XML的副本所以你必须通过key来继承
<record id="product_catg_test_extended" model="ir.ui.view">
<field name="name">product_catg_test_extended</field>
<field name="inherit_id" search="[('key', '=', 'theme_test.product_catg_test')]"/>
<field name="type">qweb</field>
<field name="key">test_theme_extended.product_catg_test_extended</field>
<field name="arch" type="xml">
<xpath expr="//t[@t-if='categories']" position="replace"></xpath>
</field>
</record>