由于 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>