hr_org_chart
The organization chart on every Odoo employee form is one field widget: hr_org_chart. It ignores the field it sits on, calls its own controller, and caps the manager chain at five levels because of a one-line source comment.
| Technical name | hr_org_chart |
|---|---|
| Field types | any (the field's own value is ignored; core places it on a one2many) |
| Views | form |
| Module | hr_org_chart (auto-installed with Employees) |
| Used in core | 2 occurrences: the hr.employee form and the hr.employee.public form |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0 |
| No-code setup | No. The chart ships preinstalled on employee forms; Studio has no org chart component |
| Alternatives | many2one_avatar_employee, many2many_avatar_employee, hr_employee_chat |
What the org chart widget does
What this means for your team
Working examples
The res.users regression and the refresh contract
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | Verified | Not released. The module is deleted and the widget moves into hr under the same name; see below. |
| Odoo 19.0 | Verified | Verified against the shipped source. The res.users fallback from 17 and 18 is removed. |
| Odoo 18.0 | Verified | Same widget, plus an explicit fallback for res.users forms via employee_id and employee_parent_id. |
| Odoo 17.0 | Verified | First modern Owl version with useRecordObserver; res.users fallback present. |
| Odoo 16.0 | Verified | Older implementation extending the Field class with a custom popover helper; same chart on the page. |
Upgrade note. Migrating to 19: any custom view that relied on the widget resolving employees on res.users forms must be reworked, because the fallback fields are no longer read. Migrating to 20: update JavaScript patch paths from hr_org_chart to hr and template names from hr_org_chart.* to hr.*.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The chart area is empty on a custom form | The record has no parent_id loaded or the model is not an employee model the controller understands. Load parent_id in the view (invisible is fine) and keep the widget on hr.employee or hr.employee.public. |
| Chart worked on the user form in 18 and broke after upgrading to 19 | Odoo 19 removed the res.users fallback that read employee_id and employee_parent_id. Move the chart to the employee form, or patch the component to re-add the mapping. |
| Long manager chains show only part of the hierarchy | The controller caps the chain at 5 manager levels by default. Click the more managers link, which refetches with a cap of 100, or override _managers_level server side. |
| Subordinate counts look wrong | Counts come from the controller's subordinate computation, not from child_ids in the view. Check parent_id data quality; archived employees and multi-company rules affect the counts. |
| Clicking a person does nothing for some users | Navigation goes through hr.employee.get_formview_action, so record rules apply. Grant the user read access to the target employees or accept the restriction. |
Org chart widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
hr_org_chart | Walking the reporting hierarchy from any employee record | Fetches its own data from /hr/get_org_chart; ignores the field it is mounted on |
| many2one_avatar_employee | Showing or editing the manager as a single field | A plain relational field with an avatar chip; no hierarchy walking |
| many2many_avatar_employee | A flat set of employees on a record | Renders avatars for a many2many; no reporting-line semantics |
| hr_employee_chat | Jumping into a Discuss chat with the employee | A one-icon view widget; complements the chart rather than replacing it |
Frequently asked questions
Why does the org chart stop after five managers?+
Which field should hr_org_chart be placed on?+
Can I show the org chart on the res.users form?+
How do the Direct and Indirect subordinate links work?+
Does the chart update when I change the manager before saving?+
Is there a full-page org chart for the whole company?+
Does your Odoo org chart match how the company actually runs?
Reporting lines drive approvals, time off delegation and team dashboards across Odoo HR. We clean up parent_id data, extend the org chart controller for deeper or custom hierarchies, and keep it all working through version upgrades, including the module shuffle coming in Odoo 20.
Talk to an Odoo HR expert