【问题标题】:Why Odoo removes milliseconds in Datetime fields?为什么 Odoo 会删除 Datetime 字段中的毫秒数?
【发布时间】:2017-12-28 16:19:27
【问题描述】:

我有一个方法,其中self 是一个简单的stock.move 记录。此外,您可能知道,stock.move 模型有一个名为dateDatetime 字段。如果我在方法中编写这段代码:

lines = self.search([
    ('date', '=', self.date),
])

它应该至少返回当前行。它确实如此,但仅限于某些服务器。其他人什么都不返回。为什么?因为如果我在 PostgreSQL 中查询date,运行正常的服务器返回2017-12-27 17:10:00,但是,运行错误的服务器返回2017-12-27 17:10:00.131112。因此,对于毫秒级的情况,ORM search 方法正在这样做:

lines = self.search([
    (2017-12-27 17:10:00.131112, '=', 2017-12-27 17:10:00),
])

self.date 正在返回不带毫秒的 Datetime 值,这就是比较失败的原因。我也需要得到毫秒数。

我该如何管理?

【问题讨论】:

  • 其实我认为create_datewrite_date字段应该有毫秒。 Datetime 字段不应该有,因为使用了 DEFAULT_SERVER_DATETIME_FORMAT 常量。所以我不知道你的情况发生了什么

标签: python postgresql python-2.7 odoo-8 odoo


【解决方案1】:

绝对正确,我在这里确认 odoo Datetime 不以 UTC 保存时间,它以 UTC 存储日期时间。即使从 odoo 5.0 开始,我们也一直在努力,直到现在。

在 Odoo 11.0 中

 id  |        create_date         |         write_date         |    date_expected    
-----+----------------------------+----------------------------+---------------------
  41 | 2017-12-21 13:06:06.927814 | 2017-12-21 13:06:06.927814 | 2017-12-21 13:01:30
   7 | 2017-12-21 08:33:22.431197 | 2017-12-21 08:33:22.431197 | 2017-12-21 08:31:54
  42 | 2017-12-21 13:07:03.659194 | 2017-12-21 13:07:03.659194 | 2017-12-21 13:06:54
   2 | 2017-12-21 07:24:24.953689 | 2017-12-21 07:24:24.953689 | 2017-12-21 07:24:25

是的。 odoo create_date, write_date 能够给你毫秒,可能对你有帮助。但确定在日期时间,不允许这样做...

如果您确实需要基于毫秒的需求,则添加附加字段以存储毫秒,而不是全部工作。

问题仍然存在于 odoo CommunityEnterprise 版本中。

*** 需要额外的小定制

【讨论】:

  • 如果我添加一个额外的字段来获取毫秒,我必须从哪里获取它的值?用户填写字段date,并且在ORM create 方法中我得到没有毫秒的日期时间,所以我不能告诉create 将毫秒部分存储到附加字段中。但是,我解决了我在搜索比较中添加 +1 秒的特定问题,但我的解决方案没有回答我正在做的问题。
  • 重写 odoo create 方法,您可以直接在附加字段中存储时间戳或毫秒。我不确定你在做什么模块,但创建方法有助于解决这个问题。
  • 我刚刚计算了一个 char 字段来存储 write_date,格式为毫秒 read_date_time = rec.create_date.strftime('%Y-%m-%d %H:%M:%S.%f')
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 2015-01-03
  • 2021-05-26
  • 2018-12-28
  • 1970-01-01
  • 2021-08-26
  • 2017-08-21
  • 2013-01-03
相关资源
最近更新 更多