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

本文介绍了如何在Odoo17中定制视图,如列表视图显示多个字段,以及如何调整表单视图的结构,以满足房地产模块中对字段合理组织和搜索功能的需求。通过修改XML文件实现这些功能,并展示了详情页表单的改进示例。
摘要由CSDN通过智能技术生成

我们在前一章中看到,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,房屋的详情页就能看到啦 

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

继续加油!

上一篇文章 odoo17开发教程(8):设置界面UI的字段属性_odoo17二次开发-CSDN博客

下一篇文章 odoo17开发教程(10):自定义搜索-CSDN博客

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Odoo中新建自定义视图,需要进行以下操作: 1. 在odoopython代码中增加新视图类型与视图模式。这可以通过在ir_actions_act_window.py和ir_ui_view.py文件中添加相关代码来实现。例如,在ir_actions_act_window.py文件中,我们可以增加以下代码来定义新的视图模式: ``` # -*- coding: utf-8 -*- from odoo import fields, models class ActWindowView(models.Model): _inherit = 'ir.actions.act_window.view' view_mode = fields.Selection(selection_add=[('eview', 'echart views')]) ``` 在ir_ui_view.py文件中,我们可以添加以下代码来定义新的视图类型: ``` # -*- coding: utf-8 -*- from odoo import fields, models class View(models.Model): _inherit = 'ir.ui.view' type = fields.Selection(selection_add=[('eview', 'echart views')]) ``` 这样,Odoo就可以识别我们新定义的视图类型。 2. 定义js相关文件和模板代码。通过编写相应的javascript文件和模板代码,我们可以实现对自定义视图的布局和行为的控制。这些文件需要与新定义的视图类型相关联,并与视图模板文件进行交互。具体的实现方法可以根据项目需求和技术要求来确定。 这样,在执行以上操作之后,就可以在Odoo中创建自定义视图了。自定义视图可以根据具体需求来设计和实现,包括自定义的布局、交互和样式等方面 。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Odoo自定义视图教程](https://blog.csdn.net/u012739578/article/details/121670077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值