
Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn
由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解
本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!
开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号
如果您登录系统碰到问题,请在微信公众号留言:
odoo 方法之间如何传递context
-
如下代码,第一个方法中
click_ready_button()
获取了context的值,同时新增一个键到context,需要把context的值同步到调用的方法update_status()
中。问题:
第二个方法获取context,会发现第一个方法中update后的键没有,context的作用域也是方法内部吗?如果实现我说的传至,第二个方法增加个参数context=context
吗?注:
方法click_ready_button()
的context值来源于视图,方法update_status()
单独调用的话,context来源于视图,如果是被click_ready_button()
方法调用的话,就需要用到被调用方法的context了。@api.multi def click_ready_button(self): context = dict(self._context or {}) section = context.get('section', False) if section: if section == 'dfs': self.update(state='progress') self.with_context(context) self.update_dfs_status()
@api.one def update_status(self): context = dict(self._context or {}) state = context.get('state', False) if state: self.dfs_status = state
-
如果是被click_ready_button()方法调用的话,就需要用到被调用方法的context了。
通过
with_context()
可以修改context
并往下传递。
相关文档:https://www.odoo.com/documentation/10.0/reference/orm.htmlwith_context([context][, **overrides]) → records
这里描述是通过
with_context()
会返回一个添加了新context
的recordse
t,原来的recordset
(你的self
)是不会被修改的,你代码里面并没有取得新recordset
并通过它调用其他方法,可以这样写:@api.multi def click_ready_button(self): ... self.with_context(key=value).update_status() ...
-
@joshua
按你说的试了,可以传递context.还有个问题:这里描述是通过
with_context()
会返回一个添加了新context的recordset,这个所谓的新的不就是我的self吗? -
@1234567
这里说的是返回,不是修改原来的值,除非你这样写,你的self的context就会改变了:
self = self.with_context(context)
-
@joshua
我以为的是self就是这个函数中通用的,如果改变self中某一个属性,在哪里的self都会同步的.