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

Odoo10中如何让Datetime字段默认仅显示时间组件

解决Odoo Datetime字段仅显示时间组件的问题

嘿,我之前做Odoo项目时刚好碰到过一模一样的需求,给你几个实用方案,你可以根据自己的业务场景选:

方案1:视图层快速设置显示格式(适合仅需展示优化的场景)

如果只是想在视图展示时只显示时间,不需要改动编辑弹窗的逻辑,可以直接在XML视图的字段定义里通过options指定时间格式:

<field name="hor_ini" options='{"format": "HH:mm:ss"}'/>

不过要注意:这个设置只是改变前端显示样式,编辑时还是会弹出完整的日期时间选择器,而且数据库里依然会存储完整的日期时间(新建记录时默认带当前日期)。

方案2:自定义Widget(彻底实现仅时间的显示与编辑)

如果想要编辑时也只让用户选择时间,自定义专属Widget是最优解,步骤如下:

  1. 在你的模块下创建JS文件(比如static/src/js/custom_time_widget.js),继承Odoo原生的DatetimeWidget并修改逻辑:
odoo.define('your_module.custom_time_widget', function(require) {
    "use strict";

    var DatetimeWidget = require('web.DatetimeWidget');
    var fieldRegistry = require('web.field_registry');

    var CustomTimeWidget = DatetimeWidget.extend({
        // 重写格式化方法,只返回时间部分
        _formatValue: function(value) {
            if (!value) return "";
            const date = moment(value);
            return date.format("HH:mm:ss");
        },
        // 重写取值逻辑,保留原有日期仅替换时间
        _getValue: function() {
            const timeStr = this.$input.val();
            if (!timeStr) return this._value;
            const originalDate = moment(this._value);
            const [hours, minutes, seconds] = timeStr.split(':');
            originalDate.set({
                hour: parseInt(hours),
                minute: parseInt(minutes),
                second: parseInt(seconds) || 0
            });
            return originalDate.toISOString();
        }
    });

    fieldRegistry.add('custom_time', CustomTimeWidget);
    return CustomTimeWidget;
});
  1. 在模块的__manifest__.py里引入这个JS文件:
'assets': {
    'web.assets_backend': [
        'your_module/static/src/js/custom_time_widget.js',
    ],
},
  1. 最后在视图里使用这个自定义Widget:
<field name="hor_ini" widget="custom_time"/>

这样不管是展示还是编辑,都只会处理时间部分,日期会保留数据库里的原有值(新建记录默认用当前日期)。

方案3:改用Float字段存储时间(最省心的纯粹时间方案)

如果你的业务场景根本不需要存储日期,只是需要记录时间点,那可以直接把字段类型改成fields.Float,配合Odoo原生的time widget:

  1. 修改字段声明:
hor_ini = fields.Float(string="Start Time", required=True)
  1. 视图里使用原生widget:
<field name="hor_ini" widget="time"/>

这个方案最省心,原生支持时间选择器,存储的是浮点数(比如14.3代表14:18),完全不需要额外开发。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:10:50