odoo11.0模块开发流程(二)-- View篇

前面我们搭建好了一个最基本的模块,不过还差View的显示,因为我个人不是原来并不是做过前端的工程师,也是现学,所以View我得特意开几章节去了解他,不然都不晓得如何去显示在odoo系统中。跟我一起进入View学习中吧(ps:我也是从互联网一堆资料中慢慢摸索的,demo模块事例雷同莫怪,我也只是单纯的学习而已)。耐心一个个元素看,然后在看如何用,以及如何组合运用的。争取大家尽快搞定基本view的构建。

  • 附加信息

    odoo模块的所有需要用到的资源文件都必须在配置文件__manifest__.py的data键值对应的list中声明,这样odoo才会去加载这些资源。在odoo中是用xml文件去编写View的,里面结合了数据模型和字段这几个东西,一不小心容易写错,写错后果就是安装模块或者更新模块出问题。

  • odoo view 中的xml结构介绍

    在odoo11.0中,最外面的跟节点是odoo,第二节点是data,然后涉及的数据啊,菜单啊之类的都写在data节点里面

<!--像这样-->
<odoo>
    <data>
    </data>
</odoo>
  • 演示的数据模块例子

    # 我们接下来的举例都是围绕上一节所创建的数据模型而测试。
    # -*- coding: utf-8 -*-
    from odoo import models, fields, api
    '''
    在模块安装完成后,odoo的ORM框架会自动把这个对象映射到数据库表
    属性类型会映射到表字段数据类型,表名是模块名_对象名,
    比如这个对象对应的表名是qingjia_qingjiadan,我们可以去postgreSQL里查看到
    '''
    class qingjia(models.Model):
    _name = 'qingjia.qingjiadan' # qingjia.qingjiadan对应在qsql中就是qingjia_qingjiadan,命名规则是这样的,我们必须严格遵守
    
    name = fields.Char(string='申请人') # name是字段,string定义的申请人是显示在view上的
    days = fields.Integer(string='天数')
    startdate = fields.Date(string='开始日期')
    reason = fields.Text(string='请假事由')
    
  • record元素

    模块数据是通过数据文件声明的,XML文件带有Record元素,增加Record或者改变都将会对数据库进行创建或更新数据库记录,odoo就是这样规定的,开始学都会比较蒙圈,没事,因为我也一样☹️。
    个人总结view的构建原理:
    1.通过record元素设置好自己需要的视图类型(视图类型也是一个表)
    2.往该视图类型的一些字段绑定值(比如视图用来显示什么数据模型,用什么方式解析)
    3.通过在视图类型的带有名称带有arch字段里设置数据如何显示(比如:tree,form等) 4.最终会转化成h5显示在web浏览器上

<!--像这样用-->
<odoo>
  <data>
    <!--model:数据模型(对应数据库中的表), id:record的标识符,方便外部引用-->
    <!--因为View是视图所以对应的model名称是odoo为我们提供的通用视图(下面会讲),而不是我们的数据模型,这个要分清楚-->
    <record model="ir.ui.view" id="view_tree_qingjia_qingjiadan">
    </record>
  </data>
</odoo>
  • field元素

    存在于record内部,record说白了我们就把他理解为是一个数据库表的对象吧,field相当于表中的字段

<!--像这样用-->
<odoo>
  <data>
    <record model="ir.ui.view" id="view_tree_qingjia_qingjiadan">
      <!--这句话意思是为ir_ui_view这个表中的name字段绑定值-->
      <field name="name">一个视图</field>
      <!--为ir_ui_view这个表中的model字段绑定值,注意这个值不是瞎几把写的,而是上面创建过得数据模型的name-->
      <field name="model">qingjia.qingjiadan</field>
      <!--声明数据解析类型为xml,设置如何显示也是在带有arch的字段的field中设置,下面会讲-->
      <field name="arch" type="xml"></field>
    </record>
  </data>
</odoo>
  • tree元素

    存在于带有arch字段的field元素里,他是一个树视图,也称为列表视图,以表格形式显示record记录的。(odoo系统界面右侧,看到的列表就是用来显示存在于数据库中的数据)

<!--像这样用-->
<odoo>
  <data>
    <record model="ir.ui.view" id="view_tree_qingjia_qingjiadan">
      <field name="name">一个视图</field>
      <field name="model">qingjia.qingjiadan</field>
      <field name="arch" type="xml">
        <!--以表格形式显示-->
        <tree>
          <!--这里的字段也不能瞎几把填,得填qingjia.qingjiadan里有的字段,不然到手运行安装更新又报错-->
          <!--需要显示出来的才设置,并不是一定要求把全部字段列出来-->
          <field name="name"/>
          <field name="days"/>
          <field name="reason"/>
        </tree>
      </field>
    </record>
  </data>
</odoo>
  • form元素

    表单视图,用于创建和编辑单个记录的视图(创建和编辑或者点击列表详情模式才会触发在odoo系统的右侧,你会看到右侧有创建按钮,点击后显示的就是form表单所描述的视图),表单视图更复杂一些,他里面包含着多种元素的自由组合(比如:groups, notebooks,buttons,fields)
    注:form视图也是可以用html进行一些布局

<!--像这样用-->
<odoo>
  <record model="ir.ui.view" id="view_form_qingjia_qingjiadan">
    <field name="name">一个表单视图</field>
    <field name="model">qingjia.qingjiadan</field>
    <fiels name="arch" type="xml">
       <!--以表单形式显示-->
      <form>
        <!--组,colspan横向跨越多少列-->
        <group colspan="4">
          <!--里面在包一层group元素其实可有可无,单纯为了直观,表示我这里好几个分组-->
          <group colspan="2" col="2">
            <!--组和组之间的分隔,以及设置组名-->
            <separator string="Group1" colspan="2"/>
            <!--需要显示的数据模型里的字段-->
            <field name="name"/>
            <field name="reason"/>
          </group>

          <group colspan="2" col="2">
            <separator string="Group2" colspan="2"/>
            <field name="days"/>
            <!--readonly附加在字段里表示只读,不可修改-->
            <field name="startdate" readonly="1"/>
          </group>

          <!--底部附加标签-->
          <notebook colspan="4">
            <!--标签页,以及设置标签名称-->
            <page string="请假理由">
                <!--需要显示的数据模型里的字段-->
                <field name="reason" nolabel="1"/>
            </page>
          </notebook>

        </group>
      </form>
    </field>
  </record>
</odoo>
  • odoo中的通用视图

    外部的一些基本结构组合差不多说完了,觉得还是有必要带你们了解一下odoo的一些通用视图
    其实odoo每个model的名称,都是可以在postgreSQL中查到的,名称和表名一样,只是点变成下划线,所以我们无论在写data文件(xml编写)也好,view文件(xml编写)也好,model名称不要瞎几把写,必须写数据库存在的那些表。不然安装或更新有得报错,提示一些找不到改模型名称等等的错误。

    • ir.ui.view

      声明于record元素的model字段,代表该记录是视图,视图类型由arch字段的根元素表示

    <!--要记住一个视图,里面肯定是包含着他要用的一些信息,我们不去设置,odoo想显示也不知道怎么显示啊对吧-->
    <odoo>
      <data>
        <record model="ir.ui.view" id="view_tree_qingjia_qingjiadan">
          <field name="name">一个视图</field>
          <field name="model">qingjia.qingjiadan</field>
          <field name="arch" type="xml">
            <tree>
              <field name="name"/>
              <field name="days"/>
              <field name="reason"/>
            </tree>
          </field>
        </record>
      </data>
    </odoo>
    
    • ir.actions.act_window

      声明于record元素的model字段,代表该记录是一个点击事件窗口,用于菜单的点击事件绑定

      <!--像这样用-->
      <record model="ir.actions.act_window" id="action_qingjia_info">
          <!--表示右侧列表标题-->
          <field name="name">信息列表</field>
          <!--表示绑定的数据模型-->
          <field name="res_model">qingjia.qingjiadan</field>
          <!--需要显示的视图类型-->
          <field name="view_mode">tree,form</field>
      </record>
    
  • menuitem元素

    用于表示菜单,一般写在xml文件最末尾,因为它需要引用ir.actions.act_window视图的id,必须要先声明ir.actions.act_window

<odoo>
  <data>
    <!--像这样用-->
    <!--第一个总是代表导航栏上的主菜单-->
    <menuitem id="menu_qingjia_root" name="请假"/>
    <!--左侧栏,parent表示父类菜单-->
    <menuitem id="menu_qingjia_list" name="信息" parent="menu_qingjia_root"/>
    <menuitem id="menu_qingjia_info" name="请假人" parent="menu_qingjia_list" action="action_qingjia_info"/>
  </data>
</odoo>

到这里其实一个简单的请假模块已经是完成了,基本支持创建、编辑、删除,值得一说的是,odoo里面有很多功能都是自带的,比如动作里的删除和复制。

results matching ""

    No results matching ""