odoo 关于self(使用操作)
一:self是什么
目前新版的Odoo中使用到的self,是对 游标cr、用户ID、模型、上下文、记录集、缓存 的封装。
我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr、self.uid。
二:通过直接设置属性来改变数据库中字段值
我们在查出某模型的记录后,可以通过 record.XX = value 来直接修改记录的字段内容。
同样,在重写模型的write方法中,也可以通过 self.XX = value 来指定新增记录中某字段的值。
这里需要注意两点:
1:修改查出来的记录字段值来改变数据库内容,是通过改变缓存中的值出发数据库写记录来达到的。
2:重写write方法时,在write方法中每调用一次 self.XX = value 语句,都会触发数据库写操作,因此一般采用以下写法。:
for rec in self: rec.XX = XX
三:环境
1:操作缓存
环境储存了模型的缓存记录集,因此我们可以通过环境来获取、增加、修改、删除记录,而触发数据库更改,从而达到操作数据库的目的。
例如:新增一条记录
self.env["模型'].create(vals)
2:改变用户权限
我们可以通过self.sudo()获得超级权限,从而确保我们的操作能够进行。
self.env['model'].sudo().create(vals)
3:访问当前用户
self.env.user #蔬舰当前登录用户工D self.env.uid self.env.user.id
4:获取XML的ID
self.env.ref('external id')
5:更新缓存,触发数据库操作
self.env.invalidate_all()
6:获取xml的id(self.env.ref)
self.env.ref('dy_picking_in_view_form').id
7:增加一条数据(self.env.ref)
#剑罐一个临时字典,存旋增加嫩据的值 #name与age都是临时变量 vals ={ 'name:name, 'age':age, } self.env['student.info'].create(vals)
8:没有条件的搜索(self.env.ref)
self.env['fr,forks.record.date'].search([],limit=1)