week_days
The row of seven weekday checkboxes on Odoo's recurrence forms is the week_days view widget. It demands seven exact boolean fields on the model, and it reorders itself by the user's locale.
August 26, 2026Updated August 26, 20265 min read
| Technical name | week_days |
|---|---|
| Views | form (view widget, |
| Module | web, present in every Odoo database |
| Used in core | 2 occurrences in lunch: the supplier form and the alert form |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0 |
| No-code setup | No. The widget is placed in view XML; Studio has no weekday row component |
| Alternatives | day_selection, many2many_checkboxes, calendar_week_days |
What the week days widget does
What this means for your team
Working examples
Locale rotation and the calendar sibling
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. The development branch shows only the Owl props migration; see below. |
| Odoo 19.0 | Verified | Verified against the shipped source. |
| Odoo 18.0 | Verified | Same widget and dependencies. No XML changes needed. |
| Odoo 17.0 | Verified | Same behavior; the calendar_week_days sibling appears alongside it. |
| Odoo 16.0 | Verified | Same widget with the older class-level fieldDependencies declaration. |
Upgrade note. Views using week_days carry over unchanged from 16 through 19. Only JavaScript that patched the component needs review: 16 declared fieldDependencies as an object on the class, while 17 and later use the array form on the registration descriptor.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The form crashes or the row renders empty on a custom model | One or more of the seven required boolean fields (sun through sat) is missing on the model. Add all seven booleans with the exact names; the widget injects them into the view automatically. |
| Days appear in the wrong order for some users | The order is rotated by the user's locale week start, not fixed. This is by design; check the user's language settings if the rotation looks wrong. |
| Column headers show technical-looking labels | Headers print each field's string attribute from the model definition. Set proper field strings in Python or translate them; the widget picks them up. |
| Checkbox clicks do not persist | The widget only updates the record in memory; it never saves. Save the form; each click marks it dirty like any field edit. |
| Checkboxes are not clickable | The widget is in a readonly context; readonly disables every checkbox. Check form-level or record-level readonly conditions. |
Week days widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
week_days | A which-days-of-the-week pattern stored as seven booleans | View widget with hardwired field names and locale-aware column order |
| day_selection | Picking one day of the month paired with a month field | A selection dropdown driven by a month attribute, not seven booleans |
| many2many_checkboxes | Checkbox lists backed by real relational records | Works on a many2many of any model; day rows would be records, not booleans |
calendar_week_days | Event recurrence days in the Calendar app | Subclass of this widget with its own template and label-click toggling |
Frequently asked questions
Can I point week_days at differently named fields?+
Do I need to add the seven fields to the view XML?+
Why does the row start with Monday for some users and Sunday for others?+
Is week_days a field widget or a view widget?+
What is calendar_week_days and when would I see it?+
Does checking a day save immediately?+
Building recurring schedules into your Odoo apps?
Weekday patterns, supplier availability windows and recurring alerts all hinge on getting the data model right before the widget ever renders. We design and build these scheduling flows in custom Odoo modules, reusing core widgets like week_days so upgrades stay painless.
Plan your scheduling feature with us