如何在OpenERP 7.0中将活动ID传递给弹出窗口
我想把当前的ID传递给一个弹出窗口,这样在我的函数里就可以访问调用对象的实际状态。
为此,我在XML视图中做了以下操作:
<page string="Opinions">
<field name="opinion_ids" context="{'generic_request_id': active_id}" >
<tree delete="false">
<field name="request_state" />
<field name="opinion_request_date" />
<field name="requestor" />
(...)
在Python代码中,我写了:
_defaults={
'state': 'requested',
'opinion_request_date': lambda *a: datetime.date.today().strftime('%Y-%m-%d'),
'request_state': lambda self, cr, uid, context: self._get_request_state(cr, uid, context=context), #store the state of the request when opinion was asked
(...)
}
(...)
def _get_request_state(self, cr, uid, context=None):
ids = context.get('generic_request_id', False)
#import pdb; pdb.set_trace()
return self.pool.get('generic.request').browse(cr, uid, ids, context).state
在调试工具pdb中,我发现“ids”是False,因为上下文中没有generic_request_id这个变量...
(Pdb) p ids
False
(Pdb) p context
{'lang': 'en_US', 'no_store_function': True, 'tz': False, 'uid': 1}
有没有人知道怎么解决这个问题?
1 个回答
2
我最终使用了一个工作流程功能,不需要上下文。
因为我的 opinions
对象和 requests
对象之间有一个 many2one
的连接,所以父请求的 id
被存储在 generic_request_id
字段里。
在创建的时候,我的工作流程会被触发,我会把 state
字段更新为新的值,同时把 request_state
更新为我调用对象中存储的值。
def request_opinion(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state': 'requested', 'request_state': self.browse(cr, uid, ids, context=context)[0].generic_request_id.state })
return True
这样我就解决了我的问题。
我把这个留在这里,希望能帮助到将来的某个人!