6

在 OpenERP 6.1 中这个 act_window:

<act_window
     domain="[('id', '=', student)]"
     id="act_schedule_student"
     name="Student"
     res_model="school.student"
     src_model="school.schedule"/>

在Schedule表单中创建一个Student按钮,该按钮打开学生树视图,仅显示相应的学生。

我的目标是直接打开学生的相应表单视图,而不是带有正确过滤学生的树视图。我尝试添加一个view_mode="form,tree",但它会打开一个新表单,而不是我想要的。我猜这可以通过添加contextact_window? 也许 a record_id,但我试过了,但active_id没有用。

4

2 回答 2

16

让 OpenERP 操作直接打开给定记录的表单视图的神奇(可能是未记录的)方法是在操作上设置一个额外的res_id属性。

不幸的是,在 OpenERP 6.1 [1]中,该res_id属性不是act_window数据模型的一部分,因此无法在 XML 声明中直接设置它。

大多数官方插件使用<button type="object" ... />绑定到 Python 方法,该方法res_id在返回的操作中设置属性。在官方模块的源代码中很容易找到这方面的例子,你可以在这个相关问题中看到一个。

快速/未经测试的示例:

school.schedule你可以在你的表单中添加这个:

<button name="open_student_form" type="object" string="Student"/>

以及模型中的以下方法school.schedule

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')],
    }

现在,如果您真的想使用“侧边栏按钮”(即使用<act_window/>)来做到这一点,它会变得有点棘手,因为您不能直接将侧边栏按钮绑定到 Python 方法;它必须绑定到存储在数据库中的操作。尽管如此,它仍然是可行的,例如通过一个ir.actions.server可以绑定到您<act_window/>并调用您的 Python 方法或执行类似操作的操作。诀窍ir.actions.server在于它可以定义为 Python 块,可以通过将动作字典分配给action变量来返回动态动作定义。如果您想遵循该路径,请在 OpenERP 插件源代码中搜索声明ir.actions.server(其中一些可能会做类似的事情)和返回具有res_id属性的操作的方法。

[1]从 OpenERP 7.0 开始,该res_id列在数据模型中明确可用,因此您可以直接设置它。

于 2012-11-05T18:38:28.377 回答
0

试试这个:

您可以自行赋予域。每当学生单击该菜单时,都会触发操作,并将域设置为以下示例代码:

<record id="action_id" model="ir.actions.act_window" >
         <field name="name">Sample</field>
         <field name="res_model">model.name</field>
         <field name="view_type">form</field>
         <field name='domain'>[('employee_id.user_id','=',uid)]</field> 
         <field name="context" >{'context_value':True}</field> <!--if required -->
</record>
于 2016-05-05T11:55:01.017 回答