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
相关产品推荐
相关产品推荐

