本文引用’刘金亮’的<odoo
快速入门与实战>的节选内容,同时也归纳了多为大神和自己(odoo小白)的总结,在文章的结尾,也会列出参考的文献,作者,及作品连接,方便大家查看与学习.会不定时更新此文章内容.
如大家想了解更改相关知识和信息,请上书店及官网购买此书,支持正版.也可以去大神的主页查看更多专业知识,系统的学习odoo.
常用修饰器
修饰器是可以在不改变函数的基础上增加函数的功能,也可以将装饰器本身理解为一种函数,当参数字段的值变化时,便调用此方法
- @api.constrains(‘xxxx’)(用于评估和检查,当参数字段的值变化时便开始检查,如果检查不通过,则字段值不会发生变化,在前端页面也会抛出一个异常)
@api.constrains('telephone')
def check_telephone(self):
if self.search_count([('telephone','=',self.telephone)])>1:
raise UserError("电话号码必须是唯一的!")
#当电话号重复时,抛出异常,否则记录
- @api.onchange(‘xxxx’)(用于系统在用户进行交互时自动更新相关联的字段,当参数字段的值变化时,抛出提示,但并不会阻止用户的行为)
@api.onchange('name')
def onchange_telephone(self):
if self.name=="小白":
return {
'warning':{
'title':"用户异常",
'message':"不爱学习的同学不能登记(生气脸)"
}
}
#当输入的值为'小白'时,抛出异常
#因为不管爱不爱学习都是学生,所以只警告,并不阻止登记操作,后门还是留的
- @api.depends(‘xxxx’)(用于计算字段,可以用于标记需要被触发的计算.使用此装饰器应该注意计算字段必须被赋值,否则便会报错)
computes=fields.Char(string="电话号码数",
required=True,compute="depends_telephone")
#在字段中调用才能生效
@api.depends('telephone')
def depends_telephone(self):
for record in self:
record.computes = len(record.telephone)*10
#将电话的长度*10,并返回
#只看代码用法,不必考虑此代码的逻辑,因为此段代码的业务逻辑是瞎编的
- @api.model(会给被装饰的方法自动带上模型该有的信息,开发者不需要传参数,改写odoo的api,就需要用到此修饰器)
@api.model
def create(self,vals):
#继承方法前添加代码:只能使用'vals'
new_recoed=super().create(vals)
#继承方法后添加代码:还可以使用'new_recoed'
return new_recoed
- @api.multi对于多个记录集的操作
@api.multi
def write(self, vals):
res = super(test_epidemic, self).write(vals)
return res