在OpenERP 6.1中,这个act_window:
<act_window
domain="[('id', '=', student)]"
id="act_schedule_student"
name="Student"
res_model="school.student"
src_model="school.schedule"/>
在日程表表单中创建学生按钮,该表单会打开仅显示相应学生的学生树视图。
我的目标是直接打开学生的相应表单视图,而不是使用正确的筛选学生打开树视图。我尝试添加view_mode="form,tree"
,但它会打开一个新表单而不是我想要的表单。我猜这可以通过将context
添加到act_window
来实现吗?也许是record_id
,但我尝试使用active_id
并且它无效。
答案 0 :(得分:16)
让OpenERP操作直接打开给定记录的表单视图的神奇(可能是未记录的)方法是在操作上设置额外的res_id
属性。
不幸的是,在OpenERP 6.1 [1] 中,res_id
属性不是act_window
数据模型的一部分,因此无法在XML声明中直接设置它
大多数官方插件使用绑定到Python方法的<button type="object" ... />
,该方法在返回的操作中设置res_id
属性。在官方模块的源代码中很容易找到这样的例子,你可以看到一个in this related question。
快速/未经测试的示例:
您可以在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')],
}
现在,如果你真的想用&#34;侧边栏按钮&#34; (即使用<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
列在数据模型中明确可用,因此您可以直接设置它。
答案 1 :(得分: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>