3.odoo的学习(odoo中的视图:tree视图、form视图、search视图)

目录

1.什么是视图

2.视图的声明方式

3.tree视图

4.form视图

5.search视图

6.优先级


1.什么是视图

        在Odoo中,视图(view)定义了模型记录的显示方式。 每种类型的视图代表一种可视化模式(如列表、表单、看板、日历等)。 一个模型可以定义多种类型的视图,同一类型的视图也可以定义多个,Odoo通过优先级或者指定视图ID的方式来进行选择匹配。Odoo中的视图也可以利用继承的方式来对原有的视图进行二次开发修改。

        视图用来向用户展示模型中的数据,依赖于模型而存在,决定了相关页面数据的展现方式,常见的的视图包括:treeformsearchkanbangraph,企业版支持更多的视图形式,如:ganttdashboard

2.视图的声明方式

Odoo中的视图定义是通过XML格式来定义,在安装模块时,这部分定义的XML会定入模型ir.ui.view中,一个视图定义是该模型的一笔数据记录,通用的格式为

<odoo>
    <record model="ir.ui.view" id="view_id">
        <field name="name">视图名称</field>
        <field name="model">视图绑定的模型</field>
        <!-- eval代表模型的优先级,如果有相同类型的视图,会使用优先级高的 -->
        <field name="priority" eval="16"></field>
        <!-- arch 的类型必须指定为xml,内部嵌套具体的视图 -->
        <field name="arch" type="xml">
            <!-- view content: <form>, <tree>, <graph>, ... -->
        </field>
    </record>
</odoo>
# ir.ui.view 代表数据库中表对应的视图的模型
  • 和action的声明方式比较类似,固定的,使用record标签包裹起来,

  • 视图的声明的model是ir.ui.view

  • 这里定义的时候注意view_id不要包括符号点(.),否则Odoo会将点号前面的部分当成是模块名称

  • 视图需要绑定模型,如上图的第二个field,绑定的模型类如:meet.meet_room
    即:应用名称.模型类名称

  • name="priority", 如果存在多个视图,可以设定优先级,看具体哪个视图起作用

  •  name="arch", 在这里面就可以写具体的视图了,tree视图、form视图等等,所有不同视图的定义XML内容放在arch字段里面。

3.tree视图

树视图(也称为列表视图)以表格形式显示记录。根元素是<tree>。 最简单的树形视图只列出要显示的所有字段(每个字段作为列)

<record model="ir.ui.view" id="testroom_list_view">
    <field name="name">TestRoomList</field>
    <field name="model">test.test_room</field>
    <field name="arch" type="xml">
        <tree>
            <field name="name" string="科目名称"/>
            <field name="seat_num"/>
        </tree>
    </field>
</record>
  • tree标签下,就可以使用模型类里面的字段了,设置几个field,应用就显示几个
  • name="模型类的字段名称"
  • string代表可以修改他们显示的名称,即列名,实际上是优先级高于模型类的字段名

例如,如下的tree中加入了两个模型类的字段就会显示出来

4.form视图

        表单用于创建和编辑单个记录。根元素是<form>。 它们由高级结构元素(group、notebook)和交互元素(button、fields)组成:

<record model="ir.ui.view" id="testroom_form_view">
    <field name="name">testroom.form</field>
    <field name="model">test.test_room</field>
    <field name="priority" eval="10"></field>
    <field name="arch" type="xml">
        <form string="TestRoom Form">
            <group>
                <field name="name" string="名称"/>
                <field name="seat_num"/>
            </group>
        </form>
    </field>
</record>
  • 也是在name="arch"的field的标签下,进行编写
  • 是一种向下排列的样式,也就是默认数模
  • group就是让字段名,也就是列名显示出来,string的用法同上

  • group默认是竖着排列,如果想要横向拍了列,所以可以这样写,col="2",是两列的意思
    <record model="ir.ui.view" id="testroom_form_view">
        <field name="name">testroom.form</field>
        <field name="model">test.test_room</field>
        <field name="priority" eval="10"></field>
        <field name="arch" type="xml">
            <form string="TestRoom Form">
                <group col="2">
                    <group>
                        <field name="name" string="名称"/>
                    </group>
                    <group>
                        <field name="seat_num"/>
                    </group>
                </group>
            </form>
        </field>
    </record>

    注意是,最外层也是group,里层也是group

  •  可以加 header标签,显示的内容能高点,一般写button等元素
<record model="ir.ui.view" id="testroom_form_view">
    <field name="name">testroom.form</field>
    <field name="model">test.test_room</field>
    <field name="arch" type="xml">
        <form string="TestRoom Form">
            <header>
                <!-- 此处可以放一些自定义的button元素 -->
                <button string="按钮">按钮</button>
            </header>
            <sheet>
                <!-- 对内容进行分组,可以在string中写分组名称,也可以写在其内的
                separator标签中 -->
                <group string="">
                    <separator string="考场管理"/>
                    <field name="name" string="科目"/>
                    <field name="seat_num"/>
                </group>
                <!-- 使用noteboook标签定义标签区域 -->
                <notebook>
                    <!-- 使用page定义不同的标签页,string为标签的名称 -->
                    <page string="科目">
                        这里是科目的描述,里面可以加其他的标签
                        <group>
                            <field name="name" string="科目"/>
                        </group>
                    </page>
                    <page string="座位数量">
                        这里是座位数量的描述,里面可以加其他的标签
                        <group>
                            <field name="seat_num"/>
                        </group>
                    </page>
                </notebook>
            </sheet>
        </form>
    </field>
</record>

  • 里面会有header标签,里面一般是写一些button之类的元素
  • form的主体部分sheet,
  • group也可以自己定义string
  • separator是分组的一个标题,我们可以自己定义
  • notebook是标签栏,notebook里面需要定义page,一个page就是一个标签
  • 比较灵活,也可以把标签放到notebook里面
  • 如果不想让一个字段修改,但可以显示可以使用readonly='1'属性

5.search视图

搜索视图自定义与列表视图(以及其他聚合视图)关联的搜索字段。根元素是<search>,它们由定义可以搜索哪些字段的字段组成

search可以控制页面搜索框的搜索内容,当只有没有定义search时,默认搜索模型的name字段

<record model="ir.ui.view" id="testroom_search_view">
    <field name="name">testroom.search</field>
    <field name="model">test.test_room</field>
    <field name="arch" type="xml">
        <search>
            <field name="name"/>
            <field name="seat_num"/>
        </search>
    </field>
</record>
  • 在odoo中搜索是包含的搜索方式

  • 对数字是比较精确的,等于的方式

  • 如果你开发的模型没有定义搜索视图,则Odoo会自动生成仅允许在名称字段上搜索的视图。

然后看运行结果,搜索时候,就不仅仅能搜名称了 ,座位数也可以搜索了

6.优先级

<field name="priority" eval="10"></field>

  • 属性值的值越小,优先级越高
  • 如果有id为一样的视图,后面的视图会把前面的视图覆盖掉,所以有多个视图时候,要保证id的值要不同。

B站up主主页 

单三er的个人空间_哔哩哔哩_Bilibili单三er,野生odoo爱好者;单三er的主页、动态、视频、专栏、频道、收藏、订阅等。哔哩哔哩Bilibili,你感兴趣的视频都在B站。https://space.bilibili.com/419877109

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值