查看“修改模型的方法”的源代码
←
修改模型的方法
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看并复制此页面的源代码:
继承也在业务逻辑级别起作用。添加新方法很简单:只需在继承类中声明新的函数。 要扩展或更改现有逻辑,可以通过声明具有完全相同名称的方法来覆盖相应的方法。新方法将替换前一个方法,它也可以只是扩展继承类的代码,使用Python的''super()''方法来调用父方法。然后,可以在调用''super()''方法之前和之后,在原有逻辑周围添加新逻辑。 == 小窍门 == 最好避免改变方法的函数签名(也就是说,保留相同的参数),以确保与其关联的现有调用继续正常工作。如果您需要添加其他参数,请将它们作为可选的关键字参数(使用默认值,这样做的目的是为了在调用函数的时候,即使不给这些带默认值的参数传值,函数也可以自己填入默认值,从而不去改变函数的签名)。 继续,原来Clear All Done按钮完成的操作不再适合我们的任务共享(task-sharing)模块,因为它不区分用户的清除所有任务,我们准备修改它,以便它只清除当前的用户的任务。为了达到目的,我们重写Clear All Done按钮对应的函数即do_clear_done(),修改为以下逻辑,首先找到当前用户对应的所有用户列表,然后对所有任务进行去使能操作(停止任务的活动)。代码如下: @api.multi def do_clear_done(self): domain = [('is_done', '=', True), '|', ('user_id', '=', self.env.uid), ('user_id', '=', False)] dones = self.search(domain) dones.write({'active': False}) return True 为了清楚起见,我们首先构建要用于查找要清除记录的过滤器表达式。 这个过滤器表达式遵循称为''domain''的Odoo特定语法:它由条件组成的列表表示,其中每个条件是元组。 这些条件默认是用逻辑与(And)连接起来的,即条件需要同时成立,如果不是默认逻辑连接符号比如“|”符号(逻辑或),则运算操作符会影响到其后面的两个操作数(即采用波兰表达式)我们将在第6章-视图 - 用户界面设计这一章讨论更多关于域的细节。 此处域使用过滤将所有已完成的任务设置为''('is_done','=',True)'',将仍有当前用户的情况设置为''('user_id','=',self.env.uid)'',或将没有当前用户的情况设置为''('user_id','=',False)''。 然后,我们使用''search''方法获取一个具有完成记录的记录集,并对其进行批量写入,将''active''字段设置为''False''。这里的Python ''False''值表示数据库中的''NULL''值。 在这种情况下,我们完全重写了父方法,将其替换为一个新的实现方法,但这不是我们通常想要做的。相反,我们应该扩展现有的逻辑与一些额外的操作。否则,我们可能会破坏已经存在的功能。 为了使重写的方法保持已经存在的逻辑,我们使用Python的''super()''语句来调用父方法的版本。让我们看一个例子。 我们可以改进''do_toggle_done()''方法,以便它只对分配给当前用户的任务执行其操作。这是实现的代码: from odoo.exceptions import ValidationError # ... # class TodoTask(models.Model): # ... @api.multi def do_toggle_done(self): for task in self: if task.user_id != self.env.user: raise ValidationError( 'Only the responsible can do this!') return super(TodoTask, self).do_toggle_done() 继承类中的方法以for循环开始,以检查任何要切换的任务都不属于另一个用户。如果这些检查通过,它然后继续调用父类方法,使用''super()''。如果没有提出错误,我们应该使用这个Odoo内置异常。与此处情况最相关的是''ValidationError''和''UserError''。 这些是重写和扩展模型类中定义的业务逻辑的基本技术。接下来,我们将了解如何扩展用户界面视图。 上一节:[[修改现有字段]] 下一节:[[扩展视图]]
返回至
修改模型的方法
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
odoo 中文开发手册
odoo 开发参考
odoo 实施笔记
Odoo 最佳方案
关于 OdooV
Odoo FAQ
工具
链入页面
相关更改
特殊页面
页面信息
友情链接
odoo官网
odoo中文网
odoo实施