有一个带有时间表模块(自制)的odoo系统。我需要在视图部分的 xml 文件中添加一些视图过滤器。我已经制作了默认版本并且有效:
<!-- tabel search view 1 -->
<record id="view_tabel_search1" model="ir.ui.view">
<field name="name">tabel.tabel.search1</field>
<field name="model">tabel.tabel</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Checker">
<filter
string="Last and following months"
name="filter1"
domain="[('write_date', '>=' ,(context_today()-relativedelta(months=2)+relativedelta(days=20)).strftime('%d-%m-%Y') )]"
help = "Press ALL to get all timesheets"/>
<field name="time_start_t" select="True"/>
<field name="id_ank" select="True"/>
</search>
</field>
</record>
但是下一个(相同的)没有显示出来:
<!--tabel search view 2 -->
<record id="view_tabel_search2" model="ir.ui.view">
<field name="name">tabel.tabel.search2</field>
<field name="model">tabel.tabel</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Checker">
<filter
string="Current and following months"
name="filter2"
domain="[('time_end_t', '>=' ,(context_today()).strftime('%d-%m-%Y'))]"
help = "Press all to get all timesheets"/>
<field name="time_start_t" select="True"/>
<field name="id_ank" select="True"/>
</search>
</field>
</record>
所以,第一个显示并正常工作,第二个不显示。它们之间的唯一区别(除了过滤规则)是 filter1 是默认值,如 actions 部分所述:
<record model="ir.actions.act_window" id="tabel_list_draft_action">
<field name="name">Tableman's sign</field>
<field name="res_model">tabel.tabel</field>
<field name="view_type">form</field>
<field name="domain">[('state','=', 'draft')]</field>
<field name="view_mode">tree,form,graph</field>
<field name="search_view_id" ref="view_tabel_search2"/>
<field name="context">{'search_default_filter1':1,'state':'draft'}</field>
</record>
也许我必须描述非默认过滤器,但我从未见过如何做到这一点的任何示例。所以任何建议都受到高度赞赏。
答案 0 :(得分:4)
在Odoo v8中自定义搜索视图
Odoo中的搜索视图是什么?
每当您在树视图,看板视图或其他可以搜索的视图时,Odoo都会使用XML搜索视图定义来确定Odoo中的搜索应该如何为该特定模型运行。例如,在“销售订单”树视图中,有一些特定选项可帮助您在Odoo中查找销售订单。
在这里,我们可以看到您如何根据客户,销售人员,销售团队,合同或产品进行搜索。您还可以看到,我们已经扩展了我们具有过滤器的搜索选项,以将销售订单限制为仅我的销售订单,报价,销售,发票,完成和新邮件。可用的Group By选项也在搜索视图中定义。
我是否必须知道如何开发模块来自定义搜索视图?
这取决于您对搜索视图的确切要求。幸运的是,添加您可能希望搜索的额外字段或删除不适合您特定业务需求的选项非常容易。但是,如果您希望创建更复杂的专用搜索,则可能需要编写自定义python代码来满足您的对象。但是,大多数情况下,您可以通过修改搜索视图来完成大多数任务,而无需创建模块。
Odoo中搜索视图的基本格式是什么?
搜索视图以XML格式存储,对于具有XML基本知识的人来说非常易读。以下是基本搜索视图:
<?xml version="1.0"?>
<search string="Search Sales Order">
<field name="name" string="Sales Order" filter_domain="['|',('name','ilike',self),('client_order_ref','ilike',self)]"/>
<field name="partner_id" operator="child_of"/>
<field name="user_id"/>
<field name="section_id" string="Sales Team" groups="base.group_multi_salesteams"/>
<field name="project_id"/>
<field name="product_id"/>
<filter string="My" domain="[('user_id','=',uid)]" name="my_sale_orders_filter"/>
<separator/>
<filter string="Quotations" name="draft" domain="[('state','in',('draft','sent'))]" help="Sales Order that haven't yet been confirmed"/>
<filter string="Sales" name="sales" domain="[('state','in',('manual','progress'))]"/>
<filter string="To Invoice" domain="[('state','=','manual')]" help="Sales Order ready to be invoiced"/>
<filter string="Done" domain="[('state','=','done')]" help="Sales Order done"/>
<separator/>
<filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<group expand="0" string="Group By">
<filter string="Salesperson" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Customer" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Order Month" domain="[]" context="{'group_by':'date_order'}"/>
</group>
</search>
每个元素都会告诉Odoo引擎确切的搜索选项。
为什么我要在Odoo中修改搜索视图?
随着系统内记录数量的增长,您的用户将花费越来越多的时间来查找完成给定任务所需的记录。当您在系统中只有几十个销售订单时,定位数据不是问题。但随着数据的增长,搜索功能使用户更容易找到记录变得更加重要。可能比Odoo中的任何其他自定义选项更多,自定义搜索视图的能力可能最有可能提高用户满意度和使用系统的安全时间。