首页 > 解决方案 > 我尝试更新 odoo 代码,但我得到 strptime() 参数 1 必须是 str,而不是 bool

问题描述

目标是获取销售日期并创建一个自动访问计划,每年 2 次访问,为期三年,我可以在旧版本的 odoo 中执行此操作,但现在我收到此错误。

这在 openerp 7 中有效,但现在我想在 Odoo 11.0 Python 3 中进行,我真的不明白我错过了什么


    class garantias(models.Model):
        _name = 'itriplee.garantias'

        equipo = fields.Many2one('itriplee.equipos', 'Equipo')
        fecha_de_venta = fields.Date('Fecha de Venta', related='equipo.venta', readonly=True)

     @api.model
        def create(self, vals):
            obj_visita = self.pool.get('itriplee.servicio')
            obj = self.env['itriplee.garantias']
            cliente = obj.cliente.id
            fecha_compra = obj.fecha_de_venta
            fm = ('%Y-%m-%d')
            cantidad_meses = 6
            ind = 0
            now = datetime.now()
            now_str = now.strftime(fm)
            now_int = datetime.strptime(now_str, fm)
            # fecha_compra_original = datetime.strptime(fecha_compra, fm)
            fecha_compra_inicial = datetime.strptime(fecha_compra, fm)
            while ind < cantidad_meses:
                fecha_6_meses = fecha_compra_inicial + relativedelta(months=6)
                if fecha_6_meses >= now_int:
                    obj_visita.create({'cliente':cliente,'visita':fecha_6_meses,'estado':'confirmar','visitas':obj.id},context=None)
                ind = ind + 1
                fecha_compra_inicial = fecha_6_meses
            return True

并得到这个错误:

Traceback (most recent call last):
  File "/home/openerp/odoo-dev/odoo/odoo/http.py", line 651, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/openerp/odoo-dev/odoo/odoo/http.py", line 310, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/home/openerp/odoo-dev/odoo/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/home/openerp/odoo-dev/odoo/odoo/http.py", line 693, in dispatch
    result = self._call_function(**self.params)
  File "/home/openerp/odoo-dev/odoo/odoo/http.py", line 342, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/openerp/odoo-dev/odoo/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/openerp/odoo-dev/odoo/odoo/http.py", line 335, in checked_call
    result = self.endpoint(*a, **kw)
  File "/home/openerp/odoo-dev/odoo/odoo/http.py", line 937, in __call__
    return self.method(*args, **kw)
  File "/home/openerp/odoo-dev/odoo/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/home/openerp/odoo-dev/odoo/addons/web/controllers/main.py", line 934, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/home/openerp/odoo-dev/odoo/addons/web/controllers/main.py", line 926, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/home/openerp/odoo-dev/odoo/odoo/api.py", line 687, in call_kw
    return call_kw_model(method, model, args, kwargs)
  File "/home/openerp/odoo-dev/odoo/odoo/api.py", line 672, in call_kw_model
    result = method(recs, *args, **kwargs)
  File "/home/openerp/odoo-dev/odoo/addons/itriplee/models/garantias.py", line 53, in create
    fecha_compra_inicial = datetime.strptime(fecha_compra, fm).date()
TypeError: strptime() argument 1 must be str, not bool

标签: pythonpython-3.xodooodoo-11

解决方案


当该字段不是日期字符串或包含空值时会发生此错误,因此在调用时返回False值。因此首先确保在调用函数时该字段包含日期str。strptime方法需要日期字符串值。

您可以使用 if 条件来检查字段 continue strptime 方法中是否存在数据,或者如果您使用的是 pycharm,您可以添加断点来检查值


推荐阅读