ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Odoo(十):基本视图

2022-07-04 15:31:07  阅读:256  来源: 互联网

标签:基本 estate tree 视图 运算符 搜索 Odoo property


在上一篇中我们Odoo我们可以发现,能够为给定模型生成默认视图。在实实际开发中,业务应用程序永远不会接受默认视图。相反,我们至少应该以一种合乎逻辑的方式组织各个领域。

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

在我们的房地产模块中,我们需要以一种合乎逻辑的方式组织字段:

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

常见的视图有如下几种:

  • form视图
  • tree视图
  • kanban视图
  • graph视图
  • gatt视图

每种视图的结构不一样,下面我们将简单介绍一下Form、Tree、Search视图的使用方法.

列表(list/tree)视图

列表视图,也叫做树视图,以表格的格式显示记录

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

例如

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

Form视图

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

它们的根元素是<form>。它们由高级结构元素(组和笔记本)和交互元素(按钮和字段)组成。

例如

<record id="crm_lost_reason_view_form" model="ir.ui.view">
    <field name="name">crm.lost.reason.form</field>
    <field name="model">crm.lost.reason</field>
    <field name="arch" type="xml">
        <form string="Lost Reason">
            <sheet>
                <div class="oe_button_box" name="button_box">
                    <button name="action_lost_leads" type="object"
                            class="oe_stat_button" icon="fa-star">
                        <div class="o_stat_info">
                            <field name="leads_count" class="o_stat_value"/>
                            <span class="o_stat_text"> Leads</span>
                        </div>
                    </button>
                </div>
                <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
                <div class="oe_title">
                    <div class="oe_edit_only">
                        <label for="name"/>
                    </div>
                    <h1 class="mb32">
                        <field name="name" class="mb16"/>
                    </h1>
                    <field name="active" invisible="1"/>
                </div>
            </sheet>
        </form>
    </field>
</record>

Search视图

搜索视图与列表视图和表单视图略有不同,因为它们不显示 内容。虽然它们适用于特定模型,但它们用于过滤其他视图的内容(通常是聚合视图,例如List)。除了用例的差异之外,它们的定义方式相同。

它们的根元素是<search>。此视图的最基本版本仅列出需要快捷方式的所有字段

Odoo 生成的默认搜索视图提供了一个快捷方式来过滤name。在自定义搜索视图中添加用户可能过滤的字段是很常见的。

例如

<record id="view_delivery_carrier_search" model="ir.ui.view">
    <field name="name">delivery.carrier.search</field>
    <field name="model">delivery.carrier</field>
    <field name="arch" type="xml">
        <search string="Delivery Carrier">
            <field name="name" string="Carrier" />
            <field name="delivery_type"/>
            <separator/>
            <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
            <group expand="1" string="Group By">
                <filter string="Provider" name="provider" context="{'group_by':'delivery_type', 'residual_visible':True}"/>
            </group>
        </search>
    </field>
</record>

搜索视图还可以包含<filter>元素,这些元素充当预定义搜索的切换。过滤器必须具有以下属性之一:

  • domain:将给定域添加到当前搜索
  • context:为当前搜索添加一些上下文;使用键group_by对给定字段名称的结果进行分组

在 Odoo 中,域对记录的条件进行编码:域是用于选择模型记录子集的标准列表。每个标准都是一个三元组,包含一个字段名、一个运算符和一个。如果指定字段满足应用于值的运算符的条件,则记录满足条件。

例如,当在Product模型上使用时,以下域选择单价大于1000的所有服务:

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

默认情况下,条件与隐式 AND 相结合,这意味着需要满足每个条件才能使记录与域匹配。逻辑运算符 &(AND)、|(OR) 和!(NOT) 可用于显式组合条件。它们用于前缀位置(运算符插入在其参数之前而不是介于两者之间)。

例如,要选择“属于服务或单价不在1000 到 2000 之间”的产品:

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

代码

代码

addons_my\estate\views\estate_property_view.xml

<?xml version="1.0" encoding="UTF-8" ?>

<odoo>
    <data>
        <!--tree 视图-->
        <record id="estate_property_tree_view" model="ir.ui.view">
            <field name="name">房产广告</field>
            <field name="model">estate.property</field>
            <field name="arch" type="xml">
                <tree>
                    <field name="name" string="name"/>
                    <field name="bedrooms" string="bedrooms"/>
                    <field name="postcode" string="postcode"/>
                    <field name="living_area" string="living area"/>
                    <field name="expected_price" string="expected price"/>
                    <field name="date_availability" string="available from"/>
                </tree>
            </field>
        </record>

        <!--form 视图-->
        <record id="estate_property_form_view" model="ir.ui.view">
            <field name="name">房产广告</field>
            <field name="model">estate.property</field>
            <field name="arch" type="xml">

                <form>
                    <sheet>
                        <h1>
                            <field name="name" string="name"/>
                        </h1>
                        <group>
                            <group>
                                <field name="postcode" string="postcode"/>
                                <field name="date_availability" string="available from"/>
                            </group>
                            <group>
                                <field name="expected_price" string="expected price"/>
                                <field name="selling_price" string="selling price"/>
                            </group>
                        </group>
                        <notebook>
                            <page string="Description">
                                <group>
                                    <field name="description" string="description"/>
                                    <field name="bedrooms" string="bedrooms"/>
                                    <field name="living_area" string="living area"/>
                                    <field name="facades" string="facades"/>
                                    <field name="garage" string="garage"/>
                                    <field name="garden" string="garden"/>
                                    <field name="garden_area" string="garden_area"/>
                                </group>
                            </page>
                        </notebook>
                    </sheet>
                </form>
            </field>
        </record>

        <!--search 视图-->
        <record id="estate_property_search_view" model="ir.ui.view">
            <field name="name">房地产广告</field>
            <field name="model">estate.property</field>
            <field name="arch" type="xml">
                <search>
                    <field name="name" string="name"/>
                    <field name="postcode" string="postcode"/>
                    <field name="expected_price" string="expected price"/>
                    <field name="bedrooms" string="bedrooms"/>
                    <field name="living_area" string="living area"/>
                    <field name="facades" string="facades"/>

                    <filter string="bedrooms" domain="[('bedrooms','>','3')]"/>
                    <filter string="bedrooms and living_area " domain="[('bedrooms','>',3),('living_area','>',200)]"/>

                    <group string="group by">
                        <field name="balcony_orientation" string="balcony orientation" context="{'group_by':'balcony_orientation'}"/>
                    </group>
                </search>
            </field>
        </record>

        <record id="estate_property_action_window" model="ir.actions.act_window">
            <field name="name">房地产广告</field>
            <field name="res_model">estate.property</field>
            <field name="view_mode">tree,form,search</field>
        </record>

        <menuitem id="estate_property_menu_action"
                  action="estate_property_action_window"/>
    </data>
</odoo>

效果

tree视图

form视图

search视图

搜索

筛选

分组

标签:基本,estate,tree,视图,运算符,搜索,Odoo,property
来源: https://www.cnblogs.com/pure3417/p/16443082.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有