You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 15删除预订触发AttributeError:'int'对象无'days'属性

问题描述

删除酒店预订时触发AttributeError: 'int' object has no attribute 'days'错误,无法定位原因,请求协助。

代码片段

class HotelReservationLine(models.Model):
    
    checkin = fields.Datetime(string="Checkin", related='line_id.checkin')
    checkout = fields.Datetime(string="Checkout", related='line_id.checkout')
    days = fields.Integer(string="Days", compute='_calculate_days')
    
    @api.depends('checkin', 'checkout')
    def _calculate_days(self):
        for rec in self:
            date = rec.checkout - rec.checkin
            rec.days = date.days

错误回溯

RPC_ERROR Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
result = request.dispatch()
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 687, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 359, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 348, in checked_call
result = self.endpoint(*a, **kw)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 916, in call
return self.method(*args, **kw)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 535, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/auto/addons/web/controllers/main.py", line 1343, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/opt/odoo/auto/addons/web/controllers/main.py", line 1335, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 464, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/custom/src/odoo/odoo/api.py", line 451, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "/opt/odoo/auto/addons/hotel_reservation/models/hotel_reservation.py", line 211, in unlink
return super(HotelReservation, self).unlink()
File "/opt/odoo/auto/addons/mail/models/mail_thread.py", line 338, in unlink
res = super(MailThread, self).unlink()
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 3700, in unlink
self.flush()
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 5644, in flush
self.recompute()
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 6117, in recompute
process(field)
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 6101, in process
field.recompute(recs)
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 1243, in recompute
self.compute_value(recs)
File "/opt/odoo/custom/src/odoo/odoo/fields.py", line 1265, in compute_value
records._compute_field_value(self)
File "/opt/odoo/custom/src/odoo/odoo/models.py", line 4255, in _compute_field_value
getattr(self, field.compute)()
File "/opt/odoo/auto/addons/hotel_reservation/models/hotel_reservation.py", line 592, in _calculate_days
rec.days = date.days
Exception

上述异常直接引发了以下异常:

Traceback (most recent call last):
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 643, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/custom/src/odoo/odoo/http.py", line 301, in _handle_exception
raise exception.with_traceback(None) from new_cause
AttributeError: 'int' object has no attribute 'days'

解决方案

错误根源是删除预订时,关联的line_id已被删除,导致checkin或checkout字段返回整数(通常是0)而非有效的Datetime对象。两个整数相减得到的结果还是整数,自然没有days属性。

修复代码只需在计算前增加非空有效性判断:

@api.depends('checkin', 'checkout')
def _calculate_days(self):
    for rec in self:
        if rec.checkin and rec.checkout:
            delta = rec.checkout - rec.checkin
            rec.days = delta.days
        else:
            rec.days = 0  # 可根据业务需求设置其他默认值,比如False

补充说明:

  • 关联字段在关联记录被删除后,会返回字段类型的默认值(Datetime类型默认返回0),而非预期的空值或Datetime对象,必须显式判断有效性。
  • 删除操作触发计算字段重算时,关联记录可能已处于待删除状态,此时获取的关联字段值大概率失效,提前判断能避免这类异常。

内容的提问来源于stack exchange,提问作者odoo newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:52:12