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)

 

 

 

posted @ 2023-02-10 15:40  *感悟人生*  阅读(95)  评论(0编辑  收藏  举报