odoo 12 自建Library Book 模块练习

源地址: https://alanhou.org/odoo12-first-application/


1. 给模块添加icon ![](https://img2018.cnblogs.com/blog/1608688/201906/1608688-20190629105136868-1444932835.png) 新建的模块book原本是没有图标的,现在要给它添加一个icon. 在你新建的模块的static目录下新建一个description目录,然后在里面添加一个icon.png的图标图片,格式必须是png,名字必须是icon. 这个图片你自己从网上下载,然后把名字和格式改成icon.png就可以了。接着去首页update App List ,再搜索你的模块就可以看到效果了。


2. 创建数据模型

在使用之前,应告知 Python 所需引用的模型目录,仅需在模块根目录__init__.py文件添加:

from . import models

要引用所创建的 Python 代码文件,我们还应添加models/init.py文件:

from . import library_book

现在我们可以在models/library_book.py中加入如下内容:

from odoo import fields, models

class Book(models.Model):
    _name = 'library.book'
    _description = 'Book'
    name = fields.Char('Title', required=True)
    isbn = fields.Char('ISBN')
    active = fields.Boolean('Active?', default=True)
    date_published = fields.Date()
    image = fields.Binary('Cover')
    publisher_id = fields.Many2one('res.partner', string='Publisher')
    author_ids = fields.Many2many('res.partner', string='Authors')

第一行是 Python 代码导入语句,让 Odoo 内核的models和fields对象在这里可用。紧接着声明了新的模型,它是models.Model派生出的一个类。然后_name 属性定义了 Odoo 全局对该模型引用的标识符。注意Python 类名 Book 与框架无关,_name 的值才是模型的标识符。

小贴士:仅有模型名使用点号(.) 来分割关键字,其它如模块、XML 标识符、数据表名等都使用下划线(_)。


3. 添加菜单项

现在有了存储数据的模型,需要添加到用户界面中。首先要做的就是添加相应菜单项。编辑views/library_menu.xml文件,在 XML 元素中定义菜单项以及执行的操作:

<!-- Action to open the Book list -->
<act_window id="action_library_book"
    name="Library Books"
    res_model="library.book"
    view_mode="tree,form"
/>
<!-- Menu item to open the Book list -->
<menuitem id="menu_library_book"
    name="Books"
    parent="menu_library"
    action="action_library_book"
/>

用户界面,包括菜单项和操作,存储在数据表中。在安装或升级插件模块时,XML文件会将这些定义载入数据库中的数据文件。以上代码是一个 Odoo 数据文件,表示两条添加到 Odoo 的记录:

<act_window>元素定义客户端窗口操作,它按顺序通过启用列表和表单视图打开library.book 模型

定义一个调用前面定义的action_library_book操作的顶级菜单项 现在再次升级模块来让修改生效。然后刷新浏览器页面,就可以看到Library顶级菜单,并包含一个子菜单项。点击该菜单会显示一个基本列表视图,记录可通过一个自动生成的表单视图进行编辑。点击 Create 按钮即可查看:
4. 创建表单视图

所有的视图都存储在数据库ir.ui.view模型中。为模型添加视图,我们在 XML文件中声明元素来描述视图,在模块安装时 XML 文件会被载入数据库。

添加views/book_view.xml文件来定义表单视图:

Book Form library.book

这个ir.ui.view记录有三个字段值:name, model和 arch。另一个重要元素是记录 id,它定义了一个可在其它记录中引用的XML ID标识符。这是library.book 模型的视图,名为Book Form。这个名称仅用于提供信息,无需唯一,但应易于分辨所引用的记录。其实可以完全省略 name,这种情况下会自动按模型名和视图类型来生成。

最重要的字段是arch,它包含了视图的定义。

标签定义了视图类型并包含视图结构。

此处中包含了要在表单中显示的字段。这些字段会自动使用默认的组件,如 date 字段使用日期选择组件。有时我们要使用不同的组件,如以上代码中的author_ids使用了显示标签列表的组件,image字段使用处理图片的相应组件。 这个组件可以改变元素的显示样式。


使用组来组织表单

标签可用于组织表单内容。在元素内加会在外层组中创建一个两列布局。推荐在group 元素中添加 name 属性,更易于其它模块对其进行继承。我们使用该标签来组织内容,修改内容如下:

这个name属性不是固定的,可以根据自己的想法取名,第一个 里的内容会显示在第一行,然后里面如果内嵌 的话默认第一个显示在左边,如果里面有两个则第二个显示在右侧。如果内嵌3个group,第三个group会在下一行的最左侧显示。filed里的model字段可以重复使用。








第二部分


from odoo import fields, models
 
class Book(models.Model):
    _inherit = 'library.book'
    is_available = fields.Boolean('Is Available?')
一个模型继承另一个模型(model),子模型中添加或者修改的字段会加在原模型中.
如果子模型修改了父模型的属性,那么在uninstall 子模型后,要重新upgrade父模型后父模型才会恢复成原来的样式。

_name是模型标识符,如果加上_name并修改会发生什么呢?其实你可以修改,这时它会创建所继承模型的拷贝,成为一个新模型。这叫作原型继承。

原文地址:https://www.cnblogs.com/plusUltra/p/11106762.html