在我的OpenERP应用程序中,我有一个我想要理解的lambda(currency_id):
_defaults = {
'display_type': True,
'journal_ids': [],
'target_move': False,
'currency_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.currency_id.id,
}
到目前为止,我知道它正在这样做:
浏览功能的原型为:浏览(cr,uid,ids,context = None)。我们将 uid 作为 ID 传递给它。 为什么我们传递的是uid而不是id?
res_company 表格中包含 currency_id 字段。
然后我假设它使用外键通过OpenERP的ORM访问它。 ORM如何知道如何连接到** res_company 字段?**
类似的问题 what is the reason of using _defaults and lambda in python for openerp development?
答案 0 :(得分:1)
你是对的:我们确实希望将ID传递给browse
。但是,在这种情况下,uid
是当前登录的res.users
对象的ID 。因此,
self.pool.get('res.users').browse(cr, uid, uid, c)
返回登录用户对应的browse_record
对象。此用户有一个与之关联的公司(通过company_id
),该公司有一种货币(currency_id
),我们使用该货币的ID作为此用户执行任何操作的默认货币。