查看“修改模型的方法”的源代码
←
修改模型的方法
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看并复制此页面的源代码:
继承也在业务逻辑级别起作用。添加新方法很简单:只需在继承类中声明新的函数。 要扩展或更改现有逻辑,可以通过声明具有完全相同名称的方法来覆盖相应的方法。新方法将替换前一个方法,它也可以只是扩展继承类的代码,使用Python的''super()''方法来调用父方法。然后,可以在调用''super()''方法之前和之后,在原有逻辑周围添加新逻辑。 == 小窍门 == 最好避免更改方法的函数签名(即保持相同的参数),以确保与其关联的现有调用继续正常工作。如果需要添加其他参数,请将它们作为可选的关键字参数(使用默认值)。 原始的“'''全部完成'''”操作不再适用于我们的任务共享模块,因为它清除所有任务,而不管其用户。我们需要修改它,以便它只清除当前用户任务。 为此,我们将使用新版本重写(或替换)原始方法,首先查找当前用户的已完成任务的列表,然后停止它们的活动: @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(&)运算符隐式连接。对于OR操作,符号| 作为联通管道,用于替换元组,并且它加入接下来的两个条件。我们将在第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实施