zoukankan      html  css  js  c++  java
  • odoo开发笔记--前端搜索视图--按照时间条件筛选

    odoo在日常使用中,常会有这样的需要,比如,某个列表按照 日 、周、月、年来过滤搜索。

    效果:

    那么如何实现呢,如下是一段不同写法的样例代码,提供参考。

    <!--某模型 搜索视图-->
            <record id="view_xxxxx_search" model="ir.ui.view">
               <field name="name">XXXXXXXX search</field>
               <field name="model">你的模型名</field>
                <field name="arch" type="xml">
                    <search string="xxxxxxxxxxxx search">
                        <field name="name" string="按照name字段搜索" domain="[('xxxxxxxx.name', '=', self)]"/>
                        <field name="xxxxx_id" string="按照xxxxx_id字段搜索" domain="[('xxxxxxxxx.xxxxx_id', '=', self)]"/>
                        <separator/>
                        <filter string="进口" name="in" domain="[('inout','=','i')]"/>
                        <filter string="出口" name="export" domain="[('inout','=','e')]"/>
                        <separator/>
                        <filter string="当天" name="today"  domain="[('create_date','&gt;=', time.strftime('%Y-%m-%d 00:00:00')),('create_date', '&lt;', context_today().strftime('%Y-%m-%d 23:59:59'))]"/>
                        <filter string="本周" name="last_week"  domain="[('create_date','&gt;', (context_today() - datetime.timedelta(weeks=1)).strftime('%%Y-%%m-%%d 00:00:00'))]"/>
                        <filter string="本月" name="month" domain="[('create_date','&gt;=', time.strftime('%Y-%m-01 00:00:00')),('create_date','&lt;',  (context_today() + relativedelta(months=1)).strftime('%Y-%m-01 00:00:00'))]"/>
                        <filter string="上月" name="month2"  domain="[('create_date','&lt;', time.strftime('%Y-%m-01 00:00:00')),('create_date','&gt;=',  (context_today() - relativedelta(months=1)).strftime('%Y-%m-01 00:00:00'))]"/>
                        <filter string="本年" name="year"  domain="[('create_date','&lt;=', time.strftime('%Y-12-31 23:59:59')),('create_date','&gt;=', time.strftime('%Y-01-01 00:00:00'))]"/>
    
                        <separator/>
                        <filter name="过去24小时" string="Last 24h" domain="[('create_date','&gt;', (context_today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d 00:00:00') )]"/>
                        <filter name="上周" string="Last Week" domain="[('create_date','&gt;', (context_today() - datetime.timedelta(weeks=1)).strftime('%Y-%m-%d 00:00:00'))]"/>
                        <!--另一种写法-->
                        <separator/>
                        <filter name="week" string="本周"
                                domain="[
                                    '&amp;',
                                    ('create_date', '>=', (context_today() + relativedelta(weeks=-1,days=1,weekday=0)).strftime('%Y-%m-%d')),
                                    ('create_date', '&lt;=', (context_today() + relativedelta(weekday=6)).strftime('%Y-%m-%d')),
                                ]"/>
                        <filter name="month" string="本月"
                                domain="[
                                    '&amp;',
                                    ('create_date', '>=', (context_today() + relativedelta(day=1)).strftime('%Y-%m-%d')),
                                    ('create_date', '&lt;=', (context_today() + relativedelta(months=1, day=1, days=-1)).strftime('%Y-%m-%d')),
                                ]"/>
    
                    </search>
               </field>
            </record>

    注意:

    create_date字段,和create_uid字段一样,都是odoo系统自带的字段,不需要在模型中创建,视图层可以直接引用,但是需要在前端列表视图中加载显示,如果界面上确实不想显示该创建时间字段,那么可以在列表tree视图中该字段下加属性:invisible="1",就可以实现加载但隐藏的效果。

    相关地址:

    https://www.cnblogs.com/chjbbs/p/5575085.html

    http://www.odoov.com/index.php?title=%E4%BD%BF%E7%94%A8%E6%97%B6%E9%97%B4%E5%92%8C%E6%97%A5%E6%9C%9F

    http://www.cnblogs.com/dancesir/p/6893224.html

    https://www.cnblogs.com/kfx2007/p/6008508.html

    https://www.zhiyunerp.com/forum/erp-1/question/odoo-354

    *******************************

    按照时间分组:

                 <!--<group expand="0" string="Group By...">-->
                            <!--<separator orientation="vertical" />-->
                            <!--<filter name="group_by_hour" string="Creation date (hour)" domain="[]" context="{'group_by':'start_date_hour'}"/>-->
                            <!--<filter name="group_by_day" string="Creation date (day)" domain="[]" context="{'group_by':'start_date:day'}"/>-->
                            <!--<filter name="group_by_week" string="Creation date (week)" domain="[]" context="{'group_by':'start_date:week'}"/>-->
                            <!--<filter name="group_by_month" string="Creation date (month)" domain="[]" context="{'group_by':'start_date:month'}" />-->
                            <!--<filter name="group_by_year" string="Creation date (year)" domain="[]" context="{'group_by':'start_date:year'}"/>-->
                 <!--</group>-->
  • 相关阅读:
    iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
    iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调
    iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController
    iOS开发之SQLite--C语言接口规范(五)——iOS开发使用SQLite实例
    iOS开发之SQLite--C语言接口规范(四) —— Result Values From A Query
    iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
    iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
    iOS开发之SQLite-C语言接口规范(一)——Ready And Open Your SQLite
    iOS开发之ImageView复用实现图片无限轮播
    iOS开发之多图片无缝滚动组件封装与使用
  • 原文地址:https://www.cnblogs.com/hellojesson/p/8144474.html
Copyright © 2011-2022 走看看