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

Odoo 11中设置Datetime字段默认时间时遇TypeError错误的求助

解决Odoo Create函数中设置默认时间时的TypeError问题

我来帮你搞定这个报错,你遇到的TypeError: replace() takes no keyword arguments其实有两个核心原因:

错误根源

  1. 类型不匹配:values['deadline']并不是Python的datetime对象,而是字符串类型。字符串的replace()方法是用来替换子串的(比如把"2024"换成"2025"),根本不接受hour、minute这类关键字参数,这就是报错的直接原因。
  2. 未赋值回结果:就算deadline是datetime对象,replace()方法也不会修改原对象,而是返回一个新的datetime实例,你必须把这个新值重新赋值给values['deadline']才会生效。

修正后的代码

用Odoo官方推荐的日期时间处理工具来修改你的代码,这样能完美兼容Odoo的字段逻辑:

from odoo import api, models, fields

class SurveyUserInputInherit(models.Model):
    _inherit = 'survey.user_input'

    @api.model
    def create(self, values):
        if 'deadline' in values:
            # 把Odoo传入的日期字符串转为datetime对象
            deadline_dt = fields.Datetime.from_string(values['deadline'])
            # 修改时间部分,再转回字符串赋值回values
            values['deadline'] = fields.Datetime.to_string(
                deadline_dt.replace(hour=23, minute=59, second=59, microsecond=999999)
            )
        line = super(SurveyUserInputInherit, self).create(values)
        return line

关键细节说明

  • 使用Odoo的日期工具:fields.Datetime.from_string()和to_string()是Odoo专门用来处理日期字段的工具,能自动适配Odoo内部的日期格式,比直接用Python的datetime.strptime()更稳妥。
  • 必须重新赋值:因为replace()返回新对象,原deadline_dt不会被改变,所以一定要把处理后的结果赋值回values['deadline'],不然修改不会生效。
  • 字段类型检查:确保你模型里的deadline字段是datetime类型(不是date类型),不然设置小时、分钟这些参数没有意义。

内容的提问来源于stack exchange,提问作者Pawan Kumar Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:02:29