【问题标题】:Is it possible to convert datetime field to date field for date comparison? (Odoo 13)是否可以将日期时间字段转换为日期字段以进行日期比较? (奥多 13)
【发布时间】:2021-10-26 10:00:48
【问题描述】:

假设我有两个模型。

model_a.py 有 2 个字段:

  name = fields.Many2one('hr.employee', 'Employee name')
  start_datetime = fields.Datetime('Datetime working')

我根据这些字段创建了 4 条记录。显示用户树视图的结果如下:

 Employee name     Datetime working
 A                 10/26/2021 07:00:00
 B                 10/26/2021 08:00:00
 C                 10/26/2021 09:00:00
 D                 10/27/2021 07:00:00

model_b.py 有 1 个字段:

 start_date = fields.Date('Date working')

然后我为 start_date 字段选择了:10/26/2021。

我想加载 2021 年 10 月 26 日的所有记录,而不通过以下日期比较传递 model_a.py 中 datetime 字段的特定时间:

@onchange('start_date')

我知道日期字段只能与日期对象进行比较。

我试过这样转换:

 start_datetime = fields.Datetime('Datetime working')
 get_date = start_datetime.date()

但是我遇到了错误:

  .....
  [Previous line repeated 317 more times]
  RecursionError: maximum recursion depth exceeded while calling a Python object

注意:我仍然希望将 Datetime 字段的格式保持为“Datetime”

请帮忙! 谢谢!

【问题讨论】:

    标签: date datetime comparison odoo-13


    【解决方案1】:

    最后,我解决了我的要求。 使用 combine 和 timedelta 在 @onchange 的域中添加额外的一天作为两个条件。

    在model_b.py中:

    from datetime import timedelta
    ...
    @api.onchange('get_date')
    def _get_date(self):
    for rec in self:
     if rec.start_date:
       time = datetime.min.time()
       date = rec.get_date
       list_data = self.env['model.a'].search([('start_datetime', '>', datetime.combine(date,time)),
                                               ('start_datetime', '<', date + timedelta(days=1))])
    

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 2020-12-16
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多