zoukankan      html  css  js  c++  java
  • Odoo模块开发教程2-模块继承之原模型继承

    原模型继承

    第一步我们来为 Book 模型添加 is_available 布尔型字段。这里使用经典的 in-place 模型继承。该字段值可通过图书借出和归还记录自动计算,但现在我们先使用普通字段。要继承已有模型,需要在 Python 类中添加一个_inherit 属性来标明所继承的模型。新类继承父 Odoo 模型的所有功能,仅需在其中声明要做的修改。在任何地方使用该模型修改都可用,可以认为这类继承是对已有模型的引用并在原处做了一些修改

    为模型添加字段

    通过 Python 类来新建模型,继承模型同样是通过 Python 以及 Odoo 自有的继承机制,即_inherit 类属性。该属性标明所继承的模型。新的类继承父 Odoo 模型的所有功能,仅需声明要做修改的部分。编码指南推荐为每个模型创建一个 Python 文件,因此我们添加
    library_member/models/library_book.py 文件来继承原模型,首先创建__init__.py 文件来导入该文件:
    1、 添加 library_member/__init__.py 文件来导入 models 子文件夹:
    from . import models
    2、添加 library_member/models/__init__.py 文件子文件夹中的代码文件:
    from . import library_book
    3、创建 library_member/models/library_book.py 文件来继承 library.book 模型:
    from odoo import fields, models
    class Book(models.Model):
    _inherit = 'library.book'
    is_available = fields.Boolean('Is Available?')
    使用_inherit 类属性来声明所继承模型。注意我们并没有使用到其它类属性,甚至是_name 也没使用。 除非想要做出修改,否则不需要使用这些属性。
    “ 小贴士: _name 是模型标识符,如果修改会发生什么呢?其实你可以修改,这时它会创建所继承模型的拷贝,成为一个新模型。这叫作原型继承,本文后面会讨论。 ”
    可以把这个想成是对模型定义的一个引用,在原处做了一个修改。可以添加字段、修改已有字段、修改模型类属性甚至是包含业务逻辑的方法。要在数据表中添加新的模型字段需要安装该模块。如果一切顺利,通过 Settings > Technical > Database Structure > Models 菜单查看library.book 模型即可看到该字段。
    ~/odoo-dev/odoo/odoo-bin -d dev12 -i library_member

    修改已有字段

    通过上面部分可以看到向已有模型添加新字段非常简单。有时还要对已有字段进行修改,也非常
    简单。在继承模型时,可对已有字段叠加修改,也就是说仅需定义要增加或修改的字段属性。
    我们将对原来创建的 library_app 模块的 Book 模型做两处简单修改:
    ⚫ 为 isbn 字段添加一条提示,说明同时支持 10 位数的 ISBN(稍后会实现该功能)
    ⚫ 为 publisher_id 字段添加数据库索引,以提升搜索效率
    编辑 library_member/models/library_book.py 文件,并在 library.book 模型中添加如下代码:
    class Book(models.Model):
    ...
    isbn = fields.Char(help="Use a valid ISBN-13 or ISBN-10.")
    publisher_id = fields.Many2one(index=True)
    这会对字段进行指定属性修改,未涉及的属性不会被修改。升级模块,进入图书表单,将鼠标悬停在 ISBN 字段上,就可以看到所添加的提示信息了。 index=True 这一修改不太容易发现,通过Settings > Technical > Database Structure > Models 菜单下的字段定义中可进行查看。

    更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/

  • 相关阅读:
    util-tool工具 、时间格式化
    好用的 UI 调试技巧
    扩展jQuery的方法
    mybatis判断是否传递了条件
    mysql创建视图不允许子查询
    springMVC传递MAP给JS
    XPS15 安装ubuntu之后无法进入系统
    XPS15 9560 切换显卡之后,无法登陆的解决方式
    fedora安装chrome报错
    linux挂载硬盘
  • 原文地址:https://www.cnblogs.com/odoo14/p/12952830.html
Copyright © 2011-2022 走看看