如何在Odoo日历中限制显示特定时段?
调整Odoo日历视图的显示时段(工作日8AM-5PM)
方法一:XML视图配置快速修改
直接修改目标模型的日历视图,添加时段控制和隐藏周末的属性:
- 定位目标模型的日历视图(例如
calendar.event的默认视图calendar.view_calendar_event) - 创建继承视图,配置显示规则:
<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:MMweekend_visible="false":隐藏周六、周日列
方法二:自定义JS实现用户个性化设置
如果需要让用户通过个人字段自定义时段,可通过JS扩展日历组件动态读取设置:
- 给
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")
- 创建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(); // 刷新日历应用新设置 }); }); } }); });
- 在模块
__manifest__.py中引入JS文件:
{ # ...其他配置项 'assets': { 'web.assets_backend': [ 'custom_calendar/static/src/js/calendar_widget.js', ], }, }
- 可选:继承
res.users表单视图,添加时段设置字段到用户个人设置界面
注意事项
- 模块需依赖
calendar模块 - 修改后需刷新页面使配置生效
- 时段必须严格遵循HH:MM格式,避免显示异常
内容的提问来源于stack exchange,提问作者A C
相关产品推荐
相关产品推荐

