<p>让OpenERP action直接打开给定记录的表单视图的神奇方法(而且可能没有文档)是在action上设置一个额外的<code>res_id</code>属性。</p>
<p>不幸的是,在OpenERP 6.1<sup>[1]</sup>中,<code>res_id</code>属性不是<code>act_window</code>数据模型的一部分,因此不可能在XML声明中直接设置它。</p>
<p>大多数官方插件使用绑定到Python方法的<code><button type="object" ... /></code>,该方法在返回的操作中设置<code>res_id</code>属性。在官方模块的源代码中很容易找到这样的例子,您可以看到一个<a href="https://stackoverflow.com/questions/10671025/osv-methods-return-statement">in this related question</a>。</p>
<p><strong>快速/未测试示例:</strong></p>
<p>您可以在您的<code>school.schedule</code>表单中添加:</p>
<pre><code><button name="open_student_form" type="object" string="Student"/>
</code></pre>
<p>以及<code>school.schedule</code>模型中的以下方法:</p>
<pre><code>def open_student_form(self, cr, uid, ids, context=None):
this = self.browse(cr, uid, ids, context=context)[0]
return {
'type': 'ir.actions.act_window',
'name': 'Student',
'view_mode': 'form',
'view_type': 'form',
'res_model': 'school.student',
'nodestroy': 'true',
'res_id': this.student.id, # assuming the many2one is (mis)named 'student'
'views': [(False, 'form')],
}
</code></pre>
<p>如果你真的想用一个“侧边栏按钮”(即用一个<code><act_window/></code>)来实现这个功能,它会变得有点棘手,因为你不能直接将侧边栏按钮绑定到Python方法;它必须绑定到存储在数据库中的操作。
但是它仍然是可行的,例如通过一个<code>ir.actions.server</code>操作,它可以绑定到您的<code><act_window/></code>并调用您的Python方法或执行类似的操作。使用<code>ir.actions.server</code>的诀窍是,可以将其定义为一个Python块,该块可以通过将动作字典分配给一个<code>action</code>变量来返回动态动作定义。
如果要遵循该路径,请在OpenERP addons源代码中搜索<code>ir.actions.server</code>(其中一些可能会执行类似的操作)的声明和返回具有<code>res_id</code>属性的操作的方法。</p>
<p><sup>[1]</sup>从OpenERP 7.0开始,<code>res_id</code>列在数据模型中显式可用,因此可以直接设置它。</p>