【问题标题】:can't compare datetime.date to bool无法将 datetime.date 与 bool 进行比较
【发布时间】:2019-12-05 19:03:30
【问题描述】:

当我保存附件时,我收到此错误“无法将 datetime.date 与 bool 进行比较” 我该如何解决这个问题 这是代码

 from datetime import datetime, date, timedelta
 from odoo import models, fields, api, _
 from odoo.exceptions import Warning


class HrEmployeeDocument(models.Model):
_name = 'hr.employee.document'
_description = 'HR Employee Documents'



@api.constrains('expiry_date')
def check_expr_date(self):
    for each in self:
        exp_date = each.expiry_date
        if expiry_date < date.today():
            raise Warning('Your Document Is Already Expired.')

expiry_date = fields.Date(string='Expiry Date', copy=False)

【问题讨论】:

    标签: python python-2.7 date datetime odoo-10


    【解决方案1】:

    expiry_date 值为 null,因此当通过 odoo orm 检索时,它被检索为 False,因此您无法将 Datetime 对象与 Bool 进行比较。

    如果逻辑在记录创建期间不提供时间戳,则必须设置默认参数。或者你可以检查一个假的

    例如:expiry_date = fields.Date(string='Expiry Date', default=fields.Date.context_today, copy=False)

    更多详情请见Odoo ORM API

    【讨论】:

      【解决方案2】:

      问题是这一行

      expiry_date = fields.Date(string='Expiry Date', copy=False)
      

      odoo->field的文档中,它需要一个日期字符串,即您提供的string='Expiry Date',这是没有意义的,因此expiry_date将被分配一个布尔值False,因为它不是有效的数据字符串。

      你需要改成:

      expiry_date = fields.Date(string='2014-06-15', copy=False)
      

      它应该可以工作。

      希望这会有所帮助。

      【讨论】:

      • @MohamedFouad,我无法在本地运行您的代码,因为安装 odoo 需要很长时间。希望我的回答有帮助。
      • 我正在更改代码并添加 if self.expiry_date:如果字段为空,则效果很好,但如果设置了日期,我会收到此错误“无法将 datetime.date 与 str 进行比较”
      • 字段可用的参数之一是 odoo docs 定义的字符串: "string (str) – 用户看到的字段的标签;如果未设置,ORM 将在类(大写)。”您将其与默认参数混合在一起。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2021-10-13
      • 2010-12-28
      • 1970-01-01
      • 2013-12-18
      相关资源
      最近更新 更多