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

ODOO10计算到达时间触发TypeError: coercing to Unicode报错求助

Odoo 10 到达时间自动计算报错修复方案

错误根因

  • Odoo 10 中Datetime字段读取到的值默认是ISO格式字符串,不是Python原生datetime对象,直接与timedelta做加法运算会触发类型不匹配错误
  • 原代码存在冗余查询:starting_cities本身就是transport.management.trajet表的外键,无需额外调用search方法查询行程时长,直接取关联字段值即可

修复后完整代码

from odoo import models
from odoo import fields
from odoo import api
from datetime import timedelta


class TransportManagementLines(models.Model):
    _name = 'transport.management.lines'    
    _description = 'Transport Management Lines'    
    _rec_name = 'chauffeur'    
   
    chauffeur = fields.Many2one('transport.management.matricule', string='Nom Chauffeur', required=True, track_visibility='always')   
    starting_cities = fields.Many2one('transport.management.trajet', string='Trajet De Transport', required=True, track_visibility='onchange')   
    starting_time = fields.Datetime(string="Heure Départ", required=True, track_visibility='onchange')  
    arrival_time = fields.Datetime(string="Heure d'arriver", required=True, compute="set_arrival_time", store=True)

    @api.depends('starting_cities.travel_time', 'starting_time')    
    def set_arrival_time(self):        
        for rec in self:           
            if rec.starting_time and rec.starting_cities:                
                # 把字符串类型的发车时间转成datetime对象
                start_datetime = fields.Datetime.from_string(rec.starting_time)
                # 直接取关联的行程时长
                travel_hours = rec.starting_cities.travel_time
                # 计算到达时间
                arrival_datetime = start_datetime + timedelta(hours=travel_hours)
                # 赋值给到达时间字段
                rec.arrival_time = fields.Datetime.to_string(arrival_datetime)
            else:                
                rec.arrival_time = False


class TransportManagementTrajet(models.Model):    
    _name = 'transport.management.trajet'    
    _description = 'Transport Management Trajet'   
    _rec_name = 'nom_depart'          
    nom_depart = fields.Many2one('transport.management.config', string="Villes De Trajet", required=True)    
    travel_distance = fields.Integer(string='Nombre de KM', required=True)    
    travel_time = fields.Float(string="Durée de Trajet", required=True)

内容的提问来源于stack exchange,提问作者Abdellah Hajjam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 19:45:03