Odoo15开发手册-4.7服务器端开发-扩展方法:

扩展方法:

有时,可能需要在现有的 python 方法中执行一些额外的操作。这可以称为扩展方法。当我们添加更多功能或自定义现有模型类时,这将是修改任何现有业务逻辑所必需的。因此,在某些情况下,我们需要修改现有方法以适应添加的功能。

让我们通过扩展一个自定义函数来看看这个用例。为此,考虑一个存储教育组织所有学生记录的模型。

from odoo import fields, models, api
class Student(models.Model):
   _name = "student.student"
   _description = "Student"
   name = fields.Char(string="Name", required=True)
   partner_id = fields.Many2one('res.partner', string="Partner")
   phone = fields.Char(string="Phone Number")
   email = fields.Char(string="Email", required=True)
   status = fields.Char(string="Status")

在学生记录的form view中添加一个按钮,该按钮将自动更新该学生的状态字段值。

在 python 文件中定义 update_status() 方法。这里 write 方法用于将值写入学生记录集。

def update_status(self):
   self.write({
       'status': "Status Updated"
   })

考虑到需要继承现有的学生模型来添加一些功能。为此,我们可以继承学生模型并添加一个额外的日期字段 date_status_last_updated ,它将记录最后更新状态的日期。

class StudentInherit(models.Model):
   _inherit = "student.student"
   date_status_last_updated = fields.Date(string="Status Updated Date")

下一步是扩展 update status() 方法来更新 date_status_last_updated 的字段值。为此定义一个同名的方法。这将有助于扩展现有方法。然后使用 super() 方法执行父类中定义的所有步骤。Super 用于对已经在同一个类中定义的方法进行超级化。超级 create() 或 write() 方法在 odoo 中很常见。重要的是要记住,还必须为扩展函数指定所有参数。如果父函数中有任何额外的参数,您也必须在继承的类中指定它。下面是扩展方法,它会先执行父方法中执行的所有步骤,然后执行扩展方法中添加的步骤

def update_status(self):
   res = super(Student, self).update_status()
   self.write({
       'date_status_last_updated': fields.Date.today()
   })
   return res

通过覆盖现有方法,我们可以在不丢失实际功能的情况下对现有功能执行附加步骤。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章