我正在开发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 文件中重命名了它。现在它终于奏效了,问题就解决了。
答案 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>