Skip to main content
iVentureTeam

Odoo Human Resources widgets

HR widgets render the employee-facing parts of Odoo: org charts, skill and resume lines, attendance and time-off states, appraisal stars and the approval flows HR screens run on.

If you are customizing recruitment, payroll input or employee self-service, these are the renderers you will meet in the shipped views.

38 widgets documented294 uses in Odoo coreVersions 16.0 → 20.0 verified per widget

Every human resources widget, by use in Odoo core

Odoo Human Resources widgets: name, purpose, field types and uses in Odoo core
WidgetWhat it doesField typesUses in core
timesheet_uomtimesheet_uom is a dispatcher: it renders every timesheet duration with whichever widget matches your company's timesheet encoding unit, hh:mm for hours, a toggle for days.float114
many2one_avatar_employeeThe employee picker with a photo: many2one_avatar_employee renders an employee link as an avatar, and quietly enforces HR privacy by switching the model it reads based on the user's rights.many2one59
daterangeTime off requests, events and planned tasks all edit two dates in one calendar popover. That is the daterange widget: one field element, a paired date field, and more options than any other date widget in Odoo.date, datetime21
timesheet_uom_no_toggleThe quieter sibling of timesheet_uom: same per-company unit handling, minus the clickable toggle. timesheet_uom_no_toggle exists for the screens where that button would edit data it should not.float12
datetimeThe datetime widget renders every Date & Time field in Odoo. It is one of the rare widgets Studio exposes almost completely, and it hides an undocumented range-pairing ability.datetime7
background_imageThe large employee photo panel in Odoo HR is not the standard image widget: background_image inherits every image option but swaps the template for a bare, display-only <img> with no upload or delete controls.binary, many2one6
float_time_selectionTime off "custom hours" in Odoo use float_time_selection: a float field dressed as a clock time, with an hour and minute dropdown popover and locale-aware display.float6
formatted_dateNew in Odoo 19, formatted_date is a display-only date widget with per-view format control: month names instead of numbers, conditional colors from record data, and the label Indefinite when the date is empty.date6
hr_presence_statusThe colored dot next to every employee, green for present, hollow for archived, a plane when on leave, is hr_presence_status. One tiny widget, layered by three modules, with a pill-shaped form variant that is new in Odoo 19.selection6
project_task_progressbarThe bar that shifts from green to orange to red as a task eats its allocated hours is project_task_progressbar: a fork of the standard progress bar that multiplies by 100 and colors itself by fixed thresholds.float, integer5
day_selectionIn time off accrual plans, Odoo lets you say on the 30th of April but never on the 31st. That guard is day_selection, an hr_holidays widget that trims a day dropdown to the days its companion month actually has.selection4
many2one_work_entry_typeIn payroll's work entry views, every type shows a small colored code chip (ATT, OT, SL) in front of its name. That chip is many2one_work_entry_type, an hr_work_entry widget that fetches and renders the type's short code and calendar color everywhere, dropdown included.many2one4
float_without_trailing_zerosOdoo's accrual plans say "1 day", not "1.00 days". float_without_trailing_zeros does that trimming with one regex, and since Odoo 19 the core float widget can nearly replace it.float, monetary3
many2many_avatar_employeeEmployee pickers in Odoo HR render as avatar pills through many2many_avatar_employee, a widget whose defining trick is deciding which employee model you are really looking at.many2many3
radio_followed_by_elementNew in Odoo 19: radio_followed_by_element physically moves other form elements so they sit inline after a chosen radio option. It powers the accrual plan sentences in Time Off, and it is the most DOM-invasive field widget in core.selection, many2one3
skills_one2manyThe skills block on an Odoo employee form is not a normal one2many list. skills_one2many ships its own renderer with hardcoded grouping, permission checks, and a report shortcut.one2many, many2many3
task_with_hoursOn timesheet lines, the task dropdown shows each task's remaining allocated hours while you search, then hides them once you pick. That is the task_with_hours widget from hr_timesheet.many2one3
RecruitmentCopyClipboardCharNew in Odoo 19, RecruitmentCopyClipboardChar is a copy-to-clipboard field with a twist: instead of copying what is stored, it can call a server method at click time and copy whatever that returns, which is how recruitment source aliases are created on demand.char2
boolean_radioNew in Odoo 19: boolean_radio shows a boolean as two radio buttons whose labels are full translatable sentences harvested from elements in the same view. Skip either option and the widget refuses to mount.boolean2
checkboxOdoo 19's own views write widget="checkbox", yet no such widget exists in the registry. This page explains the Missing widget console warning, the fallback that renders anyway, and what to use instead.boolean2
hr_applicant_state_selectionThe colored state bullet on an Odoo recruitment applicant is not the standard state_selection widget. hr_applicant_state_selection exists because hr.applicant carries a fourth kanban state, Waiting, that needed its own color.selection2
hr_homeworking_radio_imageThe building, house and map-marker radios on Odoo's work location form are hr_homeworking_radio_image, a radio widget whose template only knows three hardcoded values, ignores its own inherited option, and disappears entirely in the Odoo 20 branch.selection2
hr_org_chartThe 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.any2
many2many_tags_salary_bankOn the employee form, bank account tags can read (30%) BNP Paribas ...1234. That prefix is many2many_tags_salary_bank, a tags widget that annotates each account with its salary split and quietly saves your whole form when you close a tag's dialog.many2many2
resume_one2manyThe Resume block on an Odoo employee form, with its timeline dots, date ranges and grouped experience types, is resume_one2many. It is a heavily customized one2many renderer with a hardcoded grouping and one genuine rendering bug that Odoo 20 fixes.one2many2
accrual_levelsAccrual plans are the hardest thing to configure in Odoo Time Off, so Odoo stopped showing them as a list. accrual_levels draws them as a timeline you read like a sentence.one2many1
applicant_charA text cell that is also a link. On the attachments list it shows which applicant a CV belongs to and takes you there, without needing the field to be a relation.char, text1
applicant_line_many2manyApplicant tags with the job position in front of the name. On a refusal wizard covering several vacancies, that prefix is the difference between knowing who you are rejecting and guessing.many2many1
boolean_toggle_loadA list toggle that writes two fields instead of one. The second is a technical flag telling the server which level triggered the change, which its own comment explains.boolean1
hr_holidays_radio_imageThe little row of illustrations on a Time Off type is a radio group in disguise. It builds each image path from the option's own label, and it is gone on the Odoo 20 development branch.many2one, selection1
many2many_avatar_employee_classEmployee avatars with some of them flagged. It exists for one wizard, it takes its list of problem employees from a field you name, and on the development branch both the wizard and the widget are gone.many2many1
many2many_tags_skillsSkills rendered as tags that also carry whether the level is the default one. The extra data is injected rather than requested, so the view stays simple.many2many1
many2one_tags_skillsA one-to-many rendered as clickable tags, with its own Select Skills dialog. Its registered name says many2one, its class says one2many, and the class is right.one2many1
nb_attachmentA number and a paperclip: how many receipts are attached to an expense. Fifteen lines of code, and one detail worth knowing about when the number updates.integer1
skill_match_gauge_fieldNew in Odoo 19 Recruitment: the half doughnut scoring a candidate against a job is skill_match_gauge_field. It reads the job from the action context, prints the score inside the arc, and goes green when a candidate beats 100 percent.integer1
timesheet_duration_uomThe same number is 7.5 hours or 0.94 days depending on how your company records time. This widget picks the right renderer, and swaps in an hours-only variant when the setting says time.float1
versions_timelineA document's earlier versions, shown as a timeline rather than a table, with each entry restorable or downloadable.one2many1
work_permit_uploadThe binary field with a different template, used for an employee's work permit. Nothing else changes, and on the next branch it does not exist at all.binary1

Each widget page has the usage XML, Studio steps, every developer option, and a per-version compatibility table verified against the shipped Odoo source.

We use cookies to improve your experience

Essential cookies make the site work; with your permission we also use analytics to improve it. See our cookie policy.