代码之家  ›  专栏  ›  技术社区  ›  strike_noir

将域与日期时间和日期一起使用

  •  0
  • strike_noir  · 技术社区  · 7 年前

    嗨,我正试着用这样的域过滤一个模型

    class TableOne(models.Model):
        _name = "table.one"
    
        date = fields.Datetime(string="Date", default=fields.Datetime.now)
    
    class ReportOne(models.Model):
        _name = "report.one"
    
        date_from = fields.Date(string="From")
    
        date_to = fields.Date(string="To")
    
        def do_some_filtering(self, date_from, date_to):
            table_one = self.env["table.one"]
    
            domain = []
            domain.append(("date", ">=", date_from ))
            domain.append(("date", "<=", date_to ))
    
            recs = table_one.search(domain) // zero results, even though the date_from / date_to range is inside the date spread
    
    <record id="some_view_id" model="ir.ui.view">
        <field name="name">some.view.name</field>
        <field name="model">report.one</field>
        <field name="arch" type="xml">
            <form create="false">
                <sheet>
                    <div class="container-fluid">
                        <div class="row">
                            <div class="col-md-6">
                                <group string="Date Range">
                                    <field name="date_from" />
                                    <field name="date_to" />
                                </group>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-12">
                                <button string="Create" type="object" name="do_some_filtering" />
                            </div>
                        </div>
                    </div>
                </sheet>
            </form>
        </field>
    </record>
    

    我试过用 strptime , strftime 运气不好。在odoo中如何进行日期时间/日期过滤?

    我已经包含了视图代码。很抱歉,这仍然不是完整的代码。我必须删除与问题无关的不必要代码。因为如果我包含了所有的代码,这将是一个很长的代码示例。我觉得这足以理解这个问题。如果你还不明白,请告诉我。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Charif DZ    7 年前

    你在这里所做的在执行点上没有任何意义所有的字段都是空的假或者一个对象。

    这个搜索是在执行class语句时完成的,因此如果直接访问attibute,就得到一个false,或者datetime类的一个对象,那么这个对象与standar datetime labrary不同。

    你可以在搜索前打印两个字段值来确认我的意思。在这一点上,我们可以帮助你重写你的代码。

    编辑*

    odoo中的日期是一个文本。您正在使用日期字段查找日期时间,我认为odoo会将“00:00:00”连接到您的值。如果你选择同一个日期,你的记录上的日期总是在几点。 00:00:00 .

    你可以改变你的价值

          [....     '=>',  self.from_date + ' 00:00:00'),
                 ...., self.to_date + ' 23:59:59')] 
    

    记住,如果你选择的话,奥多处理时区,比如说你的地区是GMT+1 2018-01-01 00:00:00 在数据库中,该值将转换为 2017-12-31 23:00:00 注意这个事实奥多是一个国际系统和日期时间是由奥多在这个基础上管理。

        2
  •  0
  •   Hilar AK    7 年前

    这里有一个不兼容的搜索 日期 对象和 小精灵 对象。因此,您应该将date_from和date_to datetime字段设置为相同的格式输入。否则日期字段+00.0000.00(按格式)将与搜索一起添加,您将得到[]

    推荐文章