我已经开始学习在Python语言下开发OpenERP模块。我一直在寻找互联网上的源代码示例,并尝试自己学习。我有bben通过Python代码,我无法理解_defaults和lambda的使用。 喜欢:
_defaults = {
'name': lambda obj, cr, uid, context: '/',
'state': 'draft',
}
Plz给出几句话来获得关于这两者的一些技巧。
希望提出建议
由于
答案 0 :(得分:2)
_default 字典用于设置其中给出的字段的默认值。从UI创建任何新记录时,默认情况下将显示此值。
lambda :Python支持在运行时使用名为“lambda”的构造创建匿名函数(即未绑定到名称的函数)。这意味着您可以使用函数运行时,而无需使用名称对其进行定义,并将其所有代码放在一行中。现在,在OpenERP中,您可以看到函数有一些参数,如cr(数据库游标),uid,id等。使用所有这些,您可以访问数据库(使用OpenERP的ORM方法)。因此,lambda函数不是仅仅为了设置默认值而定义整个函数,而是一个明智的选择。例如,
_defaults = {
'active': True,
'type': 'general',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
在上面的代码中,可以使用lambda将company_id设置为default,该lambda为类'res.users'调用ORM的browse方法以获取登录用户的id。
你也可以通过定义一个函数
这样做def _get_default_company(self, cr, uid, context=None):
company_id = self.pool.get('res.users')._get_company(cr, uid, context=context)
return company_id
_defaults = {
'active': True,
'type': 'general',
'company_id': _get_default_company,
}
答案 1 :(得分:0)
@ArsalanSherwani:基本上我们可以在没有lambda的情况下赋值赋值,lambda只应该在我们想要一些动态值或计算值时使用,但是如果你想要赋值静态值,你可以直接赋值为_default只是一个Dict。正如你所知道lambda在行函数所以你可以在dict中调用外部函数来计算值,这一切都只是pythonic,没有什么特别的OpenERP只关于_defaults的特殊之处是它设置了字段的默认值您可以尝试创建新记录,在View中单击“创建”按钮,它会调用_default_get方法,ORM中的default_get方法将计算此块中的值并返回值。因此,您也可以使用_defulat_Get更改_defaults balck值的行为。
@ArsalanSherwani:在你的代码中
lambda obj, cr, uid, context: '/',
obj
引用Self
对象,即您当前的类本身。cr
:数据库游标对象,用于对DB执行SQL操作:)uid
L是当前用户登录的。context
是dict,用于传递对象之间的上下文值。这个所有参数都默认为从osv.osv
或osv.Model
派生的任何类方法,并且此参数是全局使用的,因此您可以将它们与您想要的方法一起使用。