Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在act_窗口中打开上下文_Python_Openerp - Fatal编程技术网

Python 在act_窗口中打开上下文

Python 在act_窗口中打开上下文,python,openerp,Python,Openerp,在OpenERP 6.1本法案窗口中: <act_window domain="[('id', '=', student)]" id="act_schedule_student" name="Student" res_model="school.student" src_model="school.schedule"/> 在计划表单中创建一个学生按钮,该按钮打开学生树状视图,仅显示适当的学生 我的目标是直接打开学生的相应表单视图

在OpenERP 6.1本法案窗口中:

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

计划表单中创建一个学生按钮,该按钮打开学生树状视图,仅显示适当的学生

我的目标是直接打开学生的相应表单视图,而不是使用正确的筛选学生的树状视图。我尝试添加一个
view\u mode=“form,tree”
,但它打开了一个新表单,而不是我想要的表单。我猜这可能是通过将
上下文添加到
动作窗口
来实现的?可能是一个
record\u id
,但我用
active\u id
尝试了这个方法,但没有成功。

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

不幸的是,在OpenERP 6.1[1]中,
res\u id
属性不是
act\u窗口
数据模型的一部分,因此无法在XML声明中直接设置它

大多数官方插件使用绑定到Python方法的
,该方法在返回的操作中设置
res\u id
属性。在官方模块的源代码中很容易找到这样的示例,您可以看到一个

快速/未经测试的示例:

您可以将此项添加到您的
学校。时间表
表格:

<button name="open_student_form" type="object" string="Student"/>
现在,如果您真的想使用“侧栏按钮”(即使用
)来实现这一点,那么它会变得有点棘手,因为您无法直接将侧栏按钮绑定到Python方法;它必须绑定到数据库中存储的操作。 不过,它仍然是可行的,例如通过
ir.actions.server
操作,该操作可以绑定到
并调用Python方法或执行类似操作。
ir.actions.server
的诀窍在于,它可以定义为一个Python块,可以通过将动作字典分配给
action
变量来返回动态动作定义。 如果您希望遵循该路径,请在OpenERP加载项源代码中搜索
ir.actions.server
(其中一些可能会执行类似的操作)的声明以及返回带有
res\u id
属性的操作的方法

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

尝试以下操作:

您可以让域本身起作用。每当学生单击该菜单时,操作将触发,并将域设置为以下示例代码:

<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>

样品
model.name
形式
[('employee_id.user_id','=',uid)]
{'context_value':True}

单击按钮时,我得到“无法封送递归字典”是什么意思?@3a2roub:听起来你返回了一个包含引用循环的错误动作指令,RPC序列化无法在线路上传输该指令。查找代码中的拼写错误,返回的dict应该只包含文本值。顺便说一句,请注意我在示例中修复的输入错误:
res\u id
值必须是整数,因此它应该是
this.student.id
,如果
this.student
是多人关系。很抱歉,这是一个相当麻烦的问题。这在web客户端中工作正常,但会导致gtk崩溃。只要我点击按钮,它就会退出。甚至不会在控制台或openerp-client.exe.log中显示错误。有什么线索吗?如果有人感兴趣,我发现我没有在函数的返回指令中添加“nodestroy:true”。它是bject类型的按钮所需要的。谢谢你,奥迪。
<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>