zoukankan      html  css  js  c++  java
  • 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并修改会发生什么呢?其实你可以修改,这时它会创建所继承模型的拷贝,成为一个新模型。这叫作原型继承。
    
    
  • 相关阅读:
    2020.9.26
    2020.10.2
    判断方法
    sql与include
    File类的获取方法
    【每日日报】第十五天
    【每日日报】第十三天
    【每日日报】第十四天
    两数相加(输入框)
    判断闰年
  • 原文地址:https://www.cnblogs.com/plusUltra/p/11106762.html
Copyright © 2011-2022 走看看