由于 xml 记录相互引用,模块安装期间出错
Error during module installation due to xml records referring to each other
我正在从事odoo模块开发,这是前任程序员留给我的。我弄清楚了大部分代码是如何工作的,但是有一些奇怪的部分太难理解了。下面的一个例子:两条记录(表单和此表单的操作),相互引用
<!-- temp validation action-->
<record id="model_action_id" model="ir.actions.act_window">
<field name="name">Password validation</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scores.temp</field>
<field name="view_type">form</field>
<field name="target">new</field>
<field name="view_mode">form</field>
<field name="view_id" ref="Scores.my_specific_view"/>
</record>
<!-- temp validation form-->
<record id="my_specific_view" model="ir.ui.view">
<field name="name">password.form2</field>
<field name="model">scores.temp</field>
<field name="act_window_id" ref="Scores.model_action_id"/>
<field name="arch" type="xml">
<form string="Password Form Validation">
<sheet>
<group>
<field name="user_id" />
<field name="password" password="True" default_focus="1"/>
<button
name="validation"
type="object"
string="Sign"
context="{'password':password,'user_id':user_id,}"
class="oe_inline oe_stat_button".
icon="fa-check-circle-o"
/>
<button
name="cancel"
string="Cancel"
special="cancel"
class="oe_inline oe_stat_button"
icon="fa-stop"
/>
</group>
</sheet>
</form>
</field>
</record>
当我尝试在新服务器上安装此模块时,出现错误:
ParseError: "External ID not found in the system: Scores.my_specific_view"
正在搜索my_specific_view,但显然此时尚未定义。有趣的是,它以某种方式在旧服务器上运行,但我不完全了解如何运行。这可能是由第一条记录引起的,它在引用之前以某种方式加载到内存中,但这是我唯一的理论。我会尝试找到一种方法来联系制作它的程序员,但这可能需要一段时间。
非常感谢任何关于如何在安装过程中避免这种冲突的建议。
更新
以防万一,如第一个答案中所述(下面更改了代码):
<!-- temp validation form-->
<record id="my_specific_view" model="ir.ui.view">
<field name="name">password.form2</field>
<field name="model">scores.temp</field>
<field name="act_window_id" ref="Scores.model_action_id"/>
<field name="arch" type="xml">
<form string="Password Form Validation">
<sheet>
<group>
<field name="user_id" />
<field name="password" password="True" default_focus="1"/>
<button
name="validation"
type="object"
string="Sign"
context="{'password':password,'user_id':user_id,}"
class="oe_inline oe_stat_button".
icon="fa-check-circle-o"
/>
<button
name="cancel"
string="Cancel"
special="cancel"
class="oe_inline oe_stat_button"
icon="fa-stop"
/>
</group>
</sheet>
</form>
</field>
</record>
<!-- temp validation action--><!--
<record id="model_action_id" model="ir.actions.act_window">
<field name="name">Password validation</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scores.temp</field>
<field name="view_type">form</field>
<field name="target">new</field>
<field name="view_mode">form</field>
<field name="view_id" ref="Scores.my_specific_view"/>
</record>-->
它以另一个错误结束,如下所示:
ParseError: "ValidateError
Field(s) `arch` failed against a constraint: Invalid view definition
Error details:
Model not found: scores.temp
Error context:
View `password.form2`
即使操作表单仍未注释,也会显示相同的错误消息。
upd2
除了我上面描述的以外,模型 scores.temp 没有找到,因为我之前在 [=40 中重命名了它=] 文件。现在终于可以用了,问题解决了
你可以先定义视图,排除act_window_id字段,然后再定义动作。
最后,您可以更新添加该字段的视图。
我就是这个意思
<!-- temp validation form-->
<record id="my_specific_view" model="ir.ui.view">
<field name="name">password.form2</field>
<field name="model">scores.temp</field>
<!-- <field name="act_window_id" ref="Scores.model_action_id"/>-->
<field name="arch" type="xml">
<form string="Password Form Validation">
<sheet>
<group>
<field name="user_id" />
<field name="password" password="True" default_focus="1"/>
<button
name="validation"
type="object"
string="Sign"
context="{'password':password,'user_id':user_id,}"
class="oe_inline oe_stat_button".
icon="fa-check-circle-o"
/>
<button
name="cancel"
string="Cancel"
special="cancel"
class="oe_inline oe_stat_button"
icon="fa-stop"
/>
</group>
</sheet>
</form>
</field>
</record>
<!-- temp validation action-->
<record id="model_action_id" model="ir.actions.act_window">
<field name="name">Password validation</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scores.temp</field>
<field name="view_type">form</field>
<field name="target">new</field>
<field name="view_mode">form</field>
<field name="view_id" ref="Scores.my_specific_view"/>
</record>
<record id="my_specific_view" model="ir.ui.view">
<field name="act_window_id" ref="Scores.model_action_id"/>
</record>
我正在从事odoo模块开发,这是前任程序员留给我的。我弄清楚了大部分代码是如何工作的,但是有一些奇怪的部分太难理解了。下面的一个例子:两条记录(表单和此表单的操作),相互引用
<!-- temp validation action-->
<record id="model_action_id" model="ir.actions.act_window">
<field name="name">Password validation</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scores.temp</field>
<field name="view_type">form</field>
<field name="target">new</field>
<field name="view_mode">form</field>
<field name="view_id" ref="Scores.my_specific_view"/>
</record>
<!-- temp validation form-->
<record id="my_specific_view" model="ir.ui.view">
<field name="name">password.form2</field>
<field name="model">scores.temp</field>
<field name="act_window_id" ref="Scores.model_action_id"/>
<field name="arch" type="xml">
<form string="Password Form Validation">
<sheet>
<group>
<field name="user_id" />
<field name="password" password="True" default_focus="1"/>
<button
name="validation"
type="object"
string="Sign"
context="{'password':password,'user_id':user_id,}"
class="oe_inline oe_stat_button".
icon="fa-check-circle-o"
/>
<button
name="cancel"
string="Cancel"
special="cancel"
class="oe_inline oe_stat_button"
icon="fa-stop"
/>
</group>
</sheet>
</form>
</field>
</record>
当我尝试在新服务器上安装此模块时,出现错误:
ParseError: "External ID not found in the system: Scores.my_specific_view"
正在搜索my_specific_view,但显然此时尚未定义。有趣的是,它以某种方式在旧服务器上运行,但我不完全了解如何运行。这可能是由第一条记录引起的,它在引用之前以某种方式加载到内存中,但这是我唯一的理论。我会尝试找到一种方法来联系制作它的程序员,但这可能需要一段时间。 非常感谢任何关于如何在安装过程中避免这种冲突的建议。
更新
以防万一,如第一个答案中所述(下面更改了代码):
<!-- temp validation form-->
<record id="my_specific_view" model="ir.ui.view">
<field name="name">password.form2</field>
<field name="model">scores.temp</field>
<field name="act_window_id" ref="Scores.model_action_id"/>
<field name="arch" type="xml">
<form string="Password Form Validation">
<sheet>
<group>
<field name="user_id" />
<field name="password" password="True" default_focus="1"/>
<button
name="validation"
type="object"
string="Sign"
context="{'password':password,'user_id':user_id,}"
class="oe_inline oe_stat_button".
icon="fa-check-circle-o"
/>
<button
name="cancel"
string="Cancel"
special="cancel"
class="oe_inline oe_stat_button"
icon="fa-stop"
/>
</group>
</sheet>
</form>
</field>
</record>
<!-- temp validation action--><!--
<record id="model_action_id" model="ir.actions.act_window">
<field name="name">Password validation</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scores.temp</field>
<field name="view_type">form</field>
<field name="target">new</field>
<field name="view_mode">form</field>
<field name="view_id" ref="Scores.my_specific_view"/>
</record>-->
它以另一个错误结束,如下所示:
ParseError: "ValidateError
Field(s) `arch` failed against a constraint: Invalid view definition
Error details:
Model not found: scores.temp
Error context:
View `password.form2`
即使操作表单仍未注释,也会显示相同的错误消息。
upd2
除了我上面描述的以外,模型 scores.temp 没有找到,因为我之前在 [=40 中重命名了它=] 文件。现在终于可以用了,问题解决了
你可以先定义视图,排除act_window_id字段,然后再定义动作。 最后,您可以更新添加该字段的视图。
我就是这个意思
<!-- temp validation form-->
<record id="my_specific_view" model="ir.ui.view">
<field name="name">password.form2</field>
<field name="model">scores.temp</field>
<!-- <field name="act_window_id" ref="Scores.model_action_id"/>-->
<field name="arch" type="xml">
<form string="Password Form Validation">
<sheet>
<group>
<field name="user_id" />
<field name="password" password="True" default_focus="1"/>
<button
name="validation"
type="object"
string="Sign"
context="{'password':password,'user_id':user_id,}"
class="oe_inline oe_stat_button".
icon="fa-check-circle-o"
/>
<button
name="cancel"
string="Cancel"
special="cancel"
class="oe_inline oe_stat_button"
icon="fa-stop"
/>
</group>
</sheet>
</form>
</field>
</record>
<!-- temp validation action-->
<record id="model_action_id" model="ir.actions.act_window">
<field name="name">Password validation</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">scores.temp</field>
<field name="view_type">form</field>
<field name="target">new</field>
<field name="view_mode">form</field>
<field name="view_id" ref="Scores.my_specific_view"/>
</record>
<record id="my_specific_view" model="ir.ui.view">
<field name="act_window_id" ref="Scores.model_action_id"/>
</record>