Skip to main content
iVentureTeam

calendar_week_days

The seven weekday toggles on a recurring event. The same widget the base framework provides, with a calendar template and a direct write on change.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 31, 20263 min read
Technical namecalendar_week_days
Viewsform (view widget, <widget> element)
Modulecalendar, the Calendar app
Used in coreThe recurrence section of the calendar event form
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0
No-code setupNo. It is set in view XML and depends on module-specific data
Alternativesweek_days, boolean_toggle, daterange

What the recurring weekdays does

A weekly recurring event needs to know which days it falls on, and the natural control for that is seven toggles rather than a multi-select. Odoo models it as seven boolean fields, one per day, and the base framework provides a widget that draws them.

This is that widget with a calendar template. The behavior is the same seven toggles; the difference is how they are laid out on the calendar event form.

It also defines its own change handler, which writes the inverted value of the day directly to the record.

What this means for your team

Recurrence rules are the part of scheduling people get wrong most often, usually by picking a pattern that does not survive holidays or month boundaries. A clear weekday picker at least makes the weekly case unambiguous.

For anything more complex than weekly, the thing to check is what your team actually means by monthly. The same word covers the fourth Tuesday and the twenty-eighth, and those diverge quickly.

Supported options in Odoo 19

The widget declares no options and reuses the base weekday widget's field dependencies unchanged, which is what makes the seven day fields available. Read from the calendar week days source, Odoo 19.0.

OptionTypeWhat it does
the seven day fieldsinherited field dependenciesOne boolean field per weekday, requested by reusing the base widget's dependency list.
the change handleroverridden methodWrites the inverted value of the toggled day straight to the record, keeping no local state.

Each day is its own field. There is no combined value: toggling a day writes to that day's boolean field directly, which is why the widget requests all seven as dependencies.

Working examples

Placing it

<widget name="calendar_week_days"/>

No attributes. The seven fields are requested by the widget.

What a toggle does

record.update({ [day]: !currentValue })

A direct write of the inverted value.

The base widget instead

<widget name="week_days"/>

Same seven toggles with the framework's own template.

Thirteen lines, and what they reuse

There is almost nothing here, and that is the point. The class extends the base weekday widget, names a calendar template and overrides one method.

That method takes the day being toggled, reads its current value from the widget's data and writes the inverse back to the record. No local state is kept, so what is displayed is always what is on the record.

The descriptor reuses the base widget's field dependencies rather than restating them, which means the seven day fields are requested identically. If the base list ever changes, this widget follows automatically.

Everything about the layout, the day labels and their order lives in the template rather than in this file.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Byte-identical to Odoo 19 on the development branch.
Odoo 19.0VerifiedVerified against the shipped source.
Odoo 18.0VerifiedSame thirteen line implementation.
Odoo 17.0VerifiedSame implementation with older component conventions.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. Present since Odoo 17. Odoo 16 handled recurrence weekdays without this widget, so an upgrade from it picks up the picker with the standard views and no data changes.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this may still change; we re-verify this page after the release.

Byte-identical. The file on the development branch matches Odoo 19 exactly, including the reused field dependencies.

Common problems and fixes

SymptomCause and fix
Toggling a day does nothingThe record is read-only, so the write is rejected. Check the form's edit conditions.
The toggles are all off on a recurring eventThe recurrence is not weekly, so the day fields are unused. Expected. Switch the recurrence to weekly.
The layout differs from other Odoo formsThis widget uses a calendar-specific template. Use the base weekday widget for the framework layout.
A day field is missingThe model does not define all seven boolean fields. The widget expects the standard set; add the missing field.
Options are ignoredThe widget declares none. Nothing to configure; the fields drive it.
The widget is missingThe Calendar module is not installed in that database. Install Calendar, or use the base weekday widget.

Recurring weekdays vs the alternatives

WidgetBest forKey difference
calendar_week_daysChoosing which weekdays a recurring calendar event falls onThe base weekday picker with a calendar template and a direct write on toggle
week_daysThe same seven toggles elsewhereThe framework's own template
boolean_toggleA single yes or noOne field rather than seven grouped
daterangeA start and end dateA period rather than a repeating pattern

The base weekday widget is the direct alternative and behaves identically with a different template. Seven separate boolean fields on the form work too, and are worse: the grouping is what makes the pattern readable.

Frequently asked questions

How are the weekdays stored?+
As seven separate boolean fields, one per day. There is no combined value, which is why the widget requests all seven as dependencies.
What does this add over the base widget?+
A calendar-specific template and a change handler that writes the inverted value directly to the record. The behavior is otherwise identical.
Does it keep local state?+
No. Each toggle writes straight to the record, so what is displayed is always what is stored.
Does it have options?+
None. It reuses the base widget's field dependencies and declares nothing of its own.
Which versions have it?+
Odoo 17 onwards, and byte-identical on the Odoo 20 development branch.

Scheduling that holds up past the first exception

Recurrence, resource booking and calendar sync all look simple until a holiday or a reschedule lands. We implement Odoo Calendar and the scheduling around it, on versions 16 through 19.

Book a free consultation

How this page was produced

The template substitution, the single change handler writing the inverted value directly to the record and the reuse of the base widget's field dependencies were read from the calendar week days source on the Odoo 19.0 branch. Version coverage comes from comparing the file across the 17.0 and 18.0 branches and its absence on 16.0, plus a byte comparison against the public development branch. Spotted an error? Tell us and we will correct the page.