刚刚为客户启动Odoo,而我在模板方面遇到了主要问题。
具有一些div和标头的简单模板。我也有一条记录要显示在主菜单中。
当我第一次创建它时,所有东西都会起作用。但是,如果碰巧我要添加或更改某些html,则这些更改不会显示在网站页面上(即使在刷新/升级主题之后)。网站构建器允许我更改文本和其他内容,但这不是我所需要的。我希望能够从XML更改html结构。但是,第一次创建该页面时,我是不允许的。该页面仅显示首次创建的页面。
希望很清楚,在此先感谢您的帮助。
乔
版本:Odoo每晚10.0-20170427
每次使用网站构建器(添加摘要,更改文本等)并保存时,Odoo数据库中的数据记录都会被修改(显然-否则您的更改将不会持续)。
在此过程中,表“ ir_model_data”中的字段“ noupdate”的值从false设置为true,以记录模板。只要将“ noupdate”设置为true,该模板的记录就不会被模块上的升级操作更改。
为了能够更改它,您必须将“ noupdate”设置回false,以便在升级过程中数据库中的模板将被xml的修改后的内容覆盖。 请检查答案底部的警告!
我遇到了类似的问题。像您一样,我用几个html标签创建了一个简单的模块/模板,将其添加到main_menu并安装了该模块。一切都按预期进行(菜单链接可见,并且显示了我所有的内容)。
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- === Page template === -->
<template name="tpl-imprint" id="website.imprint" page="True">
<t t-call="website.layout">
<div id="wrap">
<div class="container">
<div class="row">
<div class="col-xs-12">
<h1>some Header</h1>
<p>some text</p>
</div>
</div>
<!-- === Snippets' area === -->
<div class="row">
<div class="oe_structure" />
</div>
</div>
</div>
</t>
</template>
<!-- === Menu item === -->
<record id="menu_imprint" model="website.menu">
<field name="name">Imprint</field>
<field name="url">/page/imprint</field>
<field name="parent_id" ref="website.main_menu" />
<field name="sequence" type="int">100</field>
<field name="website_id" type="int">1</field>
</record>
</odoo>
之后,我进一步修改了xml文件,添加了一些文本等,升级了模块,然后一切都按预期工作。然后,我在自己创建的页面上尝试了网站构建器,添加了一些代码片段并保存了。然后我意识到我的xml中有一些错别字,于是我转到编辑器,修复了它们,升级了模块,并且-与预期不同-我的视图没有被修改。
由于我是Odoo的新手,还没有真正涉足Odoo在后端的工作方式,而且我在google上找不到任何好东西,因此我也开始分析在升级过程中数据库发生了什么如使用网站生成器。我发现,在仅使用升级上传更改时,仅更改了表“ ir_ui_view”的字段“ arch_db”以用于相关记录。通过使用网站构建器,不仅将模板内容写入“ ir_ui_view”,而且还更改了表“ ir_model_data”中相关记录的字段“ noupdate”-将其从false
设置为真实(数据库中可能正在发生更多更改,但是提到的是与问题有关的更改。)>为了解决升级问题,我只是将“ noupdate”的值改回了[[true
,并且升级过程再次起作用。 (至少在每次使用网站构建器和自定义模板之一时都必须这样做-至少如果您想再次通过xml对该模板进行更改)。请先备份数据库,然后再进行手动更改!
(我已经在数据库中测试/使用了这些sql行,但没有任何保证;)]在“ ir_ui_view”中查找模板的model_data_id)>select
model_data_id
from
ir_ui_view
where
name = '<the name of your template - in my case tpl-imprint>';
使用该ID查找/更新表“ ir_ui_data”中的相关记录
update ir_model_data set noupdate = true where id = <the ID you got with the first query>
完成!尝试升级您的模块。您对xml所做的更改应立即存储在数据库中。
您也可以一步更改值
update ir_model_data set noupdate = false where id in( select model_data_id from ir_ui_view where name = '<the name of your template - in my case tpl-imprint>' );
!!!!警告!!!!如果将“ noupdate”设置为false,则在升级过程中,您对网站构建器所做的所有更改都会丢失。如果要保留它们,则必须复制将您的修改粘贴到xml中的模板中!为此,请转到要从中获取内容的页面上的“定制/ HTML编辑器”,然后将要保留的部分复制粘贴到xml。
website.layout
模板中进行了更改。我还找到了一种解决方案,但这不是一种有效且实用的方法。为此,我按照以下步骤操作:但是我不能说这是一种有效的方法,如果我们尝试删除具有关系的模板,有时记录会出现错误。
登录到数据库并在终端中运行以下命令,然后从浏览器重新加载页面。
对于odoo 8,9
python openerp-server -u your_module_name
对于odoo 10
python odoo-bin -u your_module_name
是使用终端和常规-u的-i代替更新模块。似乎强迫了压倒一切。像:尝试添加一些翻译(到i18文件夹)后,我遇到了同样的问题。而且我的模板没有任何noupdate字段。 (无论是在数据库还是在odoo前端中)。
所以
我的解决方案
python odoo-bin -i module_name
website.layout
模板中进行了更改。我还找到了一种解决方案,但这不是一种有效且实用的方法。为此,我按照以下步骤操作:登录到数据库并在终端中运行以下命令,然后从浏览器重新加载页面。
而且我的模板没有任何noupdate字段。 (无论是在数据库还是在odoo前端中)。