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

如何在Odoo日历中限制显示特定时段?

调整Odoo日历视图的显示时段(工作日8AM-5PM)

方法一:XML视图配置快速修改

直接修改目标模型的日历视图,添加时段控制和隐藏周末的属性:

  1. 定位目标模型的日历视图(例如calendar.event的默认视图calendar.view_calendar_event)
  2. 创建继承视图,配置显示规则:
<record id="view_calendar_event_custom" model="ir.ui.view">
    <field name="name">calendar.event.custom.calendar</field>
    <field name="model">calendar.event</field>
    <field name="inherit_id" ref="calendar.view_calendar_event"/>
    <field name="arch" type="xml">
        <calendar position="attributes">
            <attribute name="start_time">08:00</attribute>
            <attribute name="end_time">17:00</attribute>
            <attribute name="weekend_visible">false</attribute>
        </calendar>
    </field>
</record>
  • start_time/end_time:控制日历视图显示的起止时段,格式为HH:MM
  • weekend_visible="false":隐藏周六、周日列

方法二:自定义JS实现用户个性化设置

如果需要让用户通过个人字段自定义时段,可通过JS扩展日历组件动态读取设置:

  1. 给res.users模型添加存储时段的字段:
from odoo import models, fields

class ResUsers(models.Model):
    _inherit = 'res.users'

    custom_calendar_start = fields.Char(string="日历开始时段", default="08:00")
    custom_calendar_end = fields.Char(string="日历结束时段", default="17:00")
  1. 创建JS文件扩展CalendarWidget,读取用户设置并应用:
odoo.define('custom_calendar.calendar_widget', function (require) {
    "use strict";

    var CalendarWidget = require('web.CalendarWidget');

    CalendarWidget.include({
        init: function () {
            this._super.apply(this, arguments);
            // 初始化默认值
            this.options.start = '08:00';
            this.options.end = '17:00';
            this.options.weekends = false;
        },

        load: function () {
            var self = this;
            return this._super.apply(this, arguments).then(function () {
                // 读取当前用户的自定义时段
                return self._rpc({
                    model: 'res.users',
                    method: 'read',
                    args: [self.session.uid, ['custom_calendar_start', 'custom_calendar_end']],
                }).then(function (userData) {
                    const user = userData[0];
                    if (user.custom_calendar_start) self.options.start = user.custom_calendar_start;
                    if (user.custom_calendar_end) self.options.end = user.custom_calendar_end;
                    self.update_calendar(); // 刷新日历应用新设置
                });
            });
        }
    });
});
  1. 在模块__manifest__.py中引入JS文件:
{
    # ...其他配置项
    'assets': {
        'web.assets_backend': [
            'custom_calendar/static/src/js/calendar_widget.js',
        ],
    },
}
  1. 可选:继承res.users表单视图,添加时段设置字段到用户个人设置界面

注意事项

  • 模块需依赖calendar模块
  • 修改后需刷新页面使配置生效
  • 时段必须严格遵循HH:MM格式,避免显示异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:42:52