如何在OpenERP 7.0中将活动ID传递给弹出窗口

0 投票
1 回答
1245 浏览
提问于 2025-04-18 01:53

我想把当前的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

这样我就解决了我的问题。
我把这个留在这里,希望能帮助到将来的某个人!

撰写回答