由于xml记录相互引用,因此在模块安装期间出错

时间:2016-01-27 08:58:26

标签: xml openerp odoo-8

我正在开发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 ,但此时显然还没有定义。有趣的是,它以某种方式在旧服务器上运行,但我并不完全理解如何。它可能是由第一个记录引起的,它在引用之前以某种方式加载到内存中,但这是我唯一的理论。我会尝试找一种联系程序员的方法,但是可能需要一段时间。 任何有关如何在安装过程中避免此冲突的建议都将受到高度赞赏。

UPD。

如果在第一个答案中描述(下面改变了代码):

<!-- 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 因为我之前在 models.py 文件中重命名了它。现在它终于奏效了,问题就解决了。

1 个答案:

答案 0 :(得分:1)

您可以先尝试定义视图,但不包括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>