odoo16入门教程第七章 基本视图

文章讲述了如何在Odoo中为estate.property模型设计和定制不同的视图,包括按照逻辑组织list视图的字段,创建分组和编辑form视图,以及构建自定义的search视图添加过滤器和分组功能。视图定义在XML文件中,通过ir.ui.view模型实例化。练习部分指导读者如何实现这些功能,强调了form视图的高度可定制性和域在数据过滤中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第七章 基本视图

在之前的章节中我们已经看到Odoo能够给模型生成默认的视图。 实际上,默认视图几乎从来不会用到,相反的,我们应该按照一定的逻辑来组织各个字段。

视图跟动作和菜单一样在XML文件中定义,他们是ir.ui.view模型的实例。

在我们的房地产模块中,我们需要按照一定逻辑来组织字段:

  • 在list视图中,我们不止显示name字段
  • 在form视图中,字段应该被分组
  • 在搜索视图中,我们不止能搜索name字段,另外,我们需要一个“available”的过滤器,并且能按照postcode来分组。

List

参考:关于这个主题的文档在这里 List.

目标: 这一小节最后,list视图应该如下显示

List view

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

根元素是tree,最基本的tree视图只是简单的显示字段,一个字段对应数据库表中的一列。

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

练习: 增加一个列表视图

在合适的XML文件中给estate.property 模型增加一个list视图,检查我们的目标字段是否被显示。

Tips:

  • 不要增加editable="bottom"属性,后面我们会讨论它。
  • 一些字段的标签可能需要调整(通过string属性)

一如既往,我们需要重启服务,别忘了 -u 选项,并且刷新浏览器就能看到结果了。

警告:

你可能需要一些复制粘贴的操作,因此要确认 id字段要保持唯一。

Form

参考:关于这个主题的文档在这里 Form.

目标: 这一小节最后,form视图应该这样:

Form view

Forms视图用来新增或修改单条记录。

根元素是form, 他们由高级别的结构元素groups和notebooks以及交互元素 buttons和fields组成。

<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>

在form视图中可以使用html标签,比如div和h1,以及class属性(Odoo提供了一些内置的class)来微调视图的外观。

注意: 这点很重要,form视图可以高度定制化

这里有一个简单的例子here.

练习: 增加自定义的form视图。

在合适的xml文件中给estate.property 模型增加form视图,检查是否完成了这一小节的目标。

这可能需要一些尝试和错误才能得到期望的结果,建议你每次只增加一个字段或者一个标签,这样能更好的帮助你理解它怎么工作

为了避免修改视图后每次都要重启服务,使用选项 --dev xml会比较方便, 使用这个参数启动服务后,当你修改了视图,只要刷新浏览器就能看到效果。

$ ./odoo-bin --addons-path=addons,../enterprise/,../technical-training-sandbox/ -d rd-demo -u estate --dev xml

搜索(Search)

参考:关于这个主题的文档在这里Search.

目标: 这一小节最后,search视图应该这样:

Search fieldsFilterGroup By

搜索视图跟form和list视图稍微有些不同,因为它不显示任何内容。虽然他们应用到了特定的模型,不过他们用来过滤其他视图的数据(一般是list视图),除了用法的不同,他们以相同的方式定义。

根元素是search,最基本的版本简单的列出被搜索的字段:

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

Odoo提供的默认的搜索视图只有一个叫“name”的过滤器,用户可以在自定义的search视图中增加其他的过滤器。

练习: 增加一个自定义的搜索视图

在合适的XML文件中为estate.property 模型增加一个自定义的搜索视图 ,并且要实现本小节的目标。

重启服务后,就可以根据给定的字段来过滤数据了。

搜索视图可以包括filter元素,它包含预定义的搜索,filter必须包含下面的属性中的一个:

  • domain: 将给定域添加到当前搜索(指定where搜索条件)
  • context: 给当前搜索增加一下上下问,用group_by分组搜索结果

这里有一个简单的例子here.

在进一步的练习之前,有必要介绍一下domain的概念。

域(Domains)

参考:关于这个主题的文档在这里 Search domains.

在Odoo中,域就是一组搜索条件,类似where语句 。 域是用于选择模型记录子集的标准列表。每个条件都是一个三元组,包含“字段名”、“操作符”和“值”。如果指定的字段满足应用于该值的运算符的条件,则记录满足标准。

默认的逻辑运算是and

[('product_type', '=', 'service'), ('unit_price', '>', 1000)]

逻辑运算符放在前面,默认是& (and),其他还有 | (or), !(not)

['|',
    ('product_type', '=', 'service'),
    '!', '&',
        ('unit_price', '>=', 1000),
        ('unit_price', '<', 2000)]

练习:增加过滤器和分组

将下面内容增加到前面的搜索视图中:

  • 一个过滤器显示有效的房产,也就是说state是“新订单”或者“收到订单”
  • 根据postcode来分组结果

看上去还好码? 在这一刻我们已经能够创建模型并且设计UI,不过,一个关键的组件还没有说,模型之间的连接 link between models.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值