📜  定义搜索视图odoo (1)

📅  最后修改于: 2023-12-03 14:53:35.845000             🧑  作者: Mango

定义搜索视图odoo

在Odoo中,搜索视图是一种重要的工具,它代表了用户在系统中进行数据搜索或过滤时使用的输入界面。通过定义搜索视图,您可以帮助用户更有效地搜索数据。

1. 创建搜索视图

要创建搜索视图,请遵循以下步骤:

  1. 在您的模块的视图文件夹中创建一个XML文件,并在内部添加视图标记。

     <?xml version="1.0" encoding="UTF-8"?>
     <odoo>
         <data>
             <record id="view_name" model="ir.ui.view">
                 <field name="name">View Name</field>
                 <field name="model">model.name</field>
                 <field name="type">search</field>
                 <field name="arch" type="xml">
                     <!-- Add view fields here -->
                 </field>
             </record>
         </data>
     </odoo>
    

    注意,将其中的"view_name"替换为您的视图名称,并将"model.name"替换为该视图搜索的模型名称。

  2. 在视图中添加搜索字段。

    在你的视图中添加如下语句以添加需要搜索的字段

    <search string="Search View">
        <field name="field1"/>
        <field name="field2"/>
        <field name="field3"/>
    </search>
    

    更改字段的名称以匹配您的模型中的字段。这些字段必须存在于模型中,但它们可以是计算字段。

  3. 将视图添加到模型中。

    在你的模型中添加如下语句以添加这个新的搜索视图

    <record model="ir.ui.view" id="model_name_search">
        <field name="name">Model Name Search</field>
        <field name="model">model.name</field>
        <field name="arch" type="xml">
            <search string="Search View">
                <field name="field1"/>
                <field name="field2"/>
                <field name="field3"/>
            </search>
        </field>
    </record>
    

    更改"model.name"以匹配您的模型名称,将“field1”,“field2”和“field3”替换为搜索视图中的字段名称。

  4. 将新的搜索视图与模块菜单关联。

    在您的模块中添加以下代码行以创建菜单并将您的新搜索视图与其关联:

    <menuitem name="Menu Name" id="your_menu_id" parent="base.menu_base_setup" action="action_name"/>
     <record model="ir.actions.act_window" id="action_name">
        <field name="name">Action Name</field>
        <field name="res_model">model.name</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="model_name_search"/>
    </record>
    

    将“Menu Name”替换为菜单名称,将“your_menu_id”替换为自己的菜单ID,将“Action Name”替换为动作名称,而将“model.name”替换为新搜索视图关联的模型名称。请注意,视图ID应为搜索视图ID。

2. 搜索视图高级功能

Odoo还提供了一些高级功能,以帮助您更好地控制搜索视图的行为。

  1. 添加过滤器

    您可以通过向视图中添加过滤器来更改默认搜索行为。视图可以使用“”元素包含一个或多个过滤器。例如:

    <search string="Search View">
       <field name="field1" filter_domain="[('field1', '!=', False)]"/>
       <field name="field2" filter_domain="[('field2', '=', 'some_value')]"/>
       <field name="field3" filter_domain="[('field3', '&gt;', 'another_value')]"/>
       <filter name="my_filter" string="My Filter" domain="[('field1', '=', 'some_value'), ('field2', '!=', False)]"/>
    </search>
    

    在这个示例中,每个搜索字段都有自己的filter_domain,而filter name="my_filter"是Vue中完整的过滤器。它具有名称"my_filter",显示名称"My Filter",以及它的特定领域。

  2. 添加搜索视图操作

    您可以向搜索视图添加操作,这些操作将在搜索视图中一旁显示。这些操作在搜索结果上执行特定的操作。例如:

    <search string="Search View">
      <field name="field1"/>
      <field name="field2"/>
      <field name="field3"/>
      <group expand="0" string="Group By...">
          <filter name="group_by_field1" string="Field1" context="{'group_by':'field1'}"/>
          <filter name="group_by_field2" string="Field2" context="{'group_by':'field2'}"/>
          <filter name="group_by_field3" string="Field3" context="{'group_by':'field3'}"/>
      </group>
    </search>
    

    在这个示例中,我们添加了一个名为"group_by"的组,并为每个字段添加了一个filter元素。这些filter元素都有一个名称、一个一个字符串、以及一个context属性,在搜索结果上添加指定的操作。

3. 结论

通过定义搜索视图,您可以帮助用户更有效地搜索Odoo系统中的数据,从而实现更高效的生产方式。 Odoo的搜索视图是非常灵活和强大的,并允许您精确地控制它们的行为。

完整代码片段如下:

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data>
        <record id="search_view_name" model="ir.ui.view">
            <field name="name">Search View Name</field>
            <field name="model">model.name</field>
            <field name="type">search</field>
            <field name="arch" type="xml">
                <search string="Search View">
                    <field name="field1" filter_domain="[('field1', '!=', False)]"/>
                    <field name="field2" filter_domain="[('field2', '=', 'some_value')]"/>
                    <field name="field3" filter_domain="[('field3', '&gt;', 'another_value')]"/>
                    <filter name="my_filter" string="My Filter" domain="[('field1', '=', 'some_value'), ('field2', '!=', False)]"/>
                    <group expand="0" string="Group By...">
                        <filter name="group_by_field1" string="Field1" context="{'group_by':'field1'}"/>
                        <filter name="group_by_field2" string="Field2" context="{'group_by':'field2'}"/>
                        <filter name="group_by_field3" string="Field3" context="{'group_by':'field3'}"/>
                    </group>
                </search>
            </field>
        </record>
        <menuitem name="My Menu" id="my_menu_id" parent="base.menu_base_setup" action="my_action"/>
        <record model="ir.actions.act_window" id="my_action">
            <field name="name">My Action</field>
            <field name="res_model">model.name</field>
            <field name="view_mode">tree,form</field>
            <field name="view_id" ref="search_view_name"/>
        </record>
    </data>
</odoo>