env[model] 获取模型类对象
self是对游标cr、用户ID、模型、上下文、记录集、缓存 的封装。
获取到这些封装self.cr、self.uid等
1、修改字段值来改变数据库内容,是通过改变缓存中的值触发数据库写记录来达成的。
2、重写write方法时,在write方法中每调用一次 self.XX = value 语句,都会触发数据库写操作,因此一般采用如下写法:
for x in self:
x.['修改的字段'] = ['修改的值']
3、环境储存了模型的缓存记录集,因此我们可以通过环境来获取、增加、修改、删除记录,而触发数据库更改,从而达到操作数据库的目的。
self.env['模型'].create(values)
4、sudo()超级权限
使用sudo()可以保证我们的操作能运行
self.env['模型'].sudo().create({'id':1, 'name': 'test'})
创建示例:
方法
def create_categories(self):
categ1 = {
'name': 'Child category 1',
'description': 'Description for child 1'
}
categ2 = {
'name': 'Child category 2',
'description': 'Description for child 2'
}
parent_category_val = {
'name': 'Parent category',
'description': 'Description for parent category',
'child_ids': [
(0, 0, categ1),
(0, 0, categ2),
]
}
# 总共 3 条记录(1 个父母和 2 个孩子)将在 hostel.room.category 模型中创建
record = self.env['hostel.room.category'].create(parent_category_val)
return True
One2many操作
[(0,0,{values})] 创建一条数据
[(1,ID,{values})] 更新id=ID记录 写入values
[(2,ID)] 删除id=ID的数据,删除数据以及整个主从数据链接关系
点击 button创建数据
<button name="create_categories" string="Create Categories" type="object"/>
hostel.room.category模型
更新示例:
def update_room_no(self):
self.ensure_one()
self.room_no = "RM002"
<button name="update_room_no" string="Update Room No" type="object"/>