我们在前一章中看到,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是什么了
也可以使用 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