odoo17开发教程(9):自定义视图

我们在前一章中看到,Odoo 能够为给定模型生成默认视图。实际上,默认视图对于业务应用程序来说是绝对不可接受的。相反,我们至少应该以合理的方式组织各个字段。

视图在 XML 文件中定义,包含操作和菜单。它们是 ir.ui.view 模型的实例。

在房地产模块中,我们需要以合理的方式组织字段:

  • 在列表(树形)视图中,我们希望显示的不仅仅是名称。
  • 在表单视图中,字段应该分组。
  • 在搜索视图中,我们必须能够搜索名称以外的内容。具体来说,我们需要 "可用 "属性的过滤器和按邮编分组的快捷方式。

列表(List)

列表视图也叫树形视图,以表格形式显示记录。

它们的根元素是 <tree>。这种视图的最基本版本只是列出要在表中显示的所有字段(每个字段都是一列):

<tree string="Tests">
    <field name="name"/>
    <field name="last_seen"/>
</tree>

以下是odoo源码中一个真实的例子:

<record id="crm_lost_reason_view_tree" model="ir.ui.view">
        <field name="name">crm.lost.reason.tree</field>
        <field name="model">crm.lost.reason</field>
        <field name="arch" type="xml">
            <tree string="Channel" editable="bottom">
                <field name="name"/>
            </tree>
        </field>
    </record>

我们现在的列表页,只显示了name一个值。

 本文结尾将实现以下功能,在列表也显示多个字段的数据:

实践练习

为了实现这个功能,我们需要修改之前创建的views/estate_property_views.xml文件。

<?xml version="1.0"?>
<odoo>
    <record id="estate_property_action" model="ir.actions.act_window">
        <field name="name">房屋</field>
        <field name="res_model">estate_property</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record id="estate_property_view_tree" model="ir.ui.view">
        <field name="name">房屋列表</field>
        <field name="model">estate_property</field>
        <field name="arch" type="xml">
            <tree string="哈哈哈">
                <field name="name"/>
                <field name="bedrooms"/>
                <field name="living_area"/>
                <field name="expected_price"/>
                <field name="selling_price"/>
                <field name="date_available"/>
            </tree>
        </field>
    </record>
</odoo>

详情页表单

表单用于创建和编辑单个记录。

它们的根元素是 <form>。它们由高级结构元素(groups和notebooks)和交互元素(按钮和字段)组成,一个简单的form结构如下:

<form string="Test">
    <sheet>
        <group>
            <group>
                <field name="name"/>
            </group>
            <group>
                <field name="last_seen"/>
            </group>
            <notebook>
                <page string="Description">
                    <field name="description"/>
                </page>
            </notebook>
        </group>
    </sheet>
</form>

对照下面的图片,就知道group和notebook是什么了

Form view

也可以使用 div 和 h1 等常规 HTML 标记以及类属性(Odoo 提供了一些内置类)对外观进行微调。

实践:修改详情页表单的结构

为了实现上图所示的效果。修改views/estate_property_views.xml文件为:

<?xml version="1.0"?>
<odoo>
    <record id="estate_property_action" model="ir.actions.act_window">
        <field name="name">房屋</field>
        <field name="res_model">estate_property</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record id="estate_property_view_tree" model="ir.ui.view">
        <field name="name">房屋列表</field>
        <field name="model">estate_property</field>
        <field name="arch" type="xml">
            <tree string="哈哈哈">
                <field name="name"/>
                <field name="bedrooms"/>
                <field name="living_area"/>
                <field name="expected_price"/>
                <field name="selling_price"/>
                <field name="date_available"/>
            </tree>
        </field>
    </record>

    <record id="estate_property_view_form" model="ir.ui.view">
        <field name="name">房屋详情</field>
        <field name="model">estate_property</field>
        <field name="arch" type="xml">
            <form string="详情">
                <sheet>
                    <div class="oe_title">
                        <h1>
                            <field name="name"/>
                        </h1>
                    </div>
                    <group name="estate_property_header">
                        <group name="estate_property_details">
                            <group col="2">
                                <field name="postcode"/>
                                <field name="expected_price"/>
                            </group>
                            <group col="2">
                                <field name="date_available"/>
                                <field name="selling_price"/>
                            </group>
                        </group>
                        <notebook>
                            <page string="description">
                                <group name="estate_property_details">
                                    <field name="description"/>
                                    <field name="bedrooms"/>
                                    <field name="living_area"/>
                                    <field name="facades"/>
                                    <field name="garage"/>
                                    <field name="garden_area"/>
                                    <field name="garden_orientation"/>
                                </group>
                            </page>
                        </notebook>
                    </group>
                </sheet>
            </form>
        </field>
    </record>
</odoo>

Upgrade你的module,房屋的详情页就能看到啦 

 下一篇文章,我们将详细了解一下搜索视图。

继续加油!


"The only person who is educated is the one who has learned how to learn and change." - Carl Rogers

相关推荐

  1. odoo定义视图

    2024-03-18 22:34:02       41 阅读
  2. Odoo创建一个定义UI视图

    2024-03-18 22:34:02       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 22:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 22:34:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 22:34:02       82 阅读
  4. Python语言-面向对象

    2024-03-18 22:34:02       91 阅读

热门阅读

  1. centos系统ssh7.4升级9.6

    2024-03-18 22:34:02       34 阅读
  2. 【C++】map与set容器的应用总结

    2024-03-18 22:34:02       41 阅读
  3. ceph删除坏的磁盘

    2024-03-18 22:34:02       45 阅读
  4. spring学习源码第一课

    2024-03-18 22:34:02       31 阅读
  5. kali wpscan 命令

    2024-03-18 22:34:02       43 阅读
  6. 自动部署SSL证书到阿里云腾讯云CDN

    2024-03-18 22:34:02       42 阅读
  7. 【CSP考点回顾】C++标准库加速输入输出

    2024-03-18 22:34:02       48 阅读