Widget category
Odoo Inventory / Purchase widgets
Inventory and purchase widgets handle quantities, lots and serials, putaway and route lines, vendor pricelists and the receipt flows the warehouse runs on barcode scanners.
Quantity and availability rendering changed repeatedly across recent versions, so the per-widget version tables matter here more than anywhere outside accounting.
24 widgets documented122 uses in Odoo coreVersions 16.0 → 20.0 verified per widget
Every inventory / purchase widget, by use in Odoo core
| Widget | What it does | Field types | Uses in core |
|---|---|---|---|
| many2one_uom | The unit dropdown on order and move lines is many2one_uom: a many2one that knows which product the line carries and offers the units that make sense for it. | many2one | 69 |
| package_m2o | The many2one that Inventory uses for packages. package_m2o looks like a plain relation field until you notice the names it displays change with the transfer's state and context. | many2one | 12 |
| stock_rescheduling_popover | The red triangle next to a transfer's scheduled date is a widget: stock_rescheduling_popover reads a JSON field and lists the late upstream documents that put the date at risk. | char | 7 |
| stock.forced_placeholder | On Odoo's replenishment screen, an empty Route cell still tells you which route would apply. That is stock.forced_placeholder: a many2one whose placeholder text survives where the standard widget would show nothing. | many2one | 5 |
| date | Every date field in Odoo renders through the Date widget. Here is its full option set as shipped in the source: accepted date limits, future warnings, picker precision, display format, and the range pairing the documentation never mentions. | date | 3 |
| forecast_widget | The green Available, orange Exp date and red Not Available pills on Odoo transfer lines are one widget reading five fields you cannot see. Here is exactly how forecast_widget decides which badge you get. | float | 3 |
| pick_from | The Pick From column on Odoo's detailed operations tells a warehouse worker exactly which location, lot and package to take stock from. The pick_from widget is a many2one over stock.quant that fakes its display name when the quant is not set. | many2one | 3 |
| picking_type_dashboard_graph | The six little bars on every Odoo Inventory Overview card, late, yesterday, today, the next days, are the picking_type_dashboard_graph widget. Each bar is clickable and filters the transfer list to its exact date bucket. | text | 3 |
| monetary_no_zero | monetary_no_zero is the standard monetary widget with one refinement: amounts that round to zero in the currency's precision render as an empty cell instead of 0.00. Purchase built it to keep its bill matching list readable. | monetary | 2 |
| counted_quantity_widget | The counted quantity cell in a physical inventory. The hard part is not the number, it is knowing the difference between counted zero and not counted at all. | float | 1 |
| lead_days_widget | The lead time breakdown on a reordering rule: supplier delay, purchase security, warehouse handling, all added up. It is a server-computed JSON payload rendered by a five line widget. | char | 1 |
| many2many_alt_pos | The list of competing quotations on a purchase order. It marks the one you are looking at, refuses to reopen it, and opens the others in the same window so the breadcrumb keeps growing. | many2many | 1 |
| mondialrelay_relay | A carrier's own map, loaded from their servers into an Odoo form. It is one of the very few widgets in core that pulls a third-party script, and it comes with a hand-written workaround for that carrier's bug. | char | 1 |
| move_product_label_field | The product cell on a transfer line, with the delivery description tucked underneath it. Its most useful behavior is knowing when that description is worth showing at all. | many2one | 1 |
| open_match_line_widget | A cell whose only job is to open the matching line it sits on. Model and method are both written into the widget, which makes it precise and completely non-portable. | any | 1 |
| package_m2m | Package names as tags on a transfer line, plus a synthetic No Package tag for the lines that are not in one. It is deliberately display only, and the code makes sure of that. | many2many | 1 |
| pol_product_many2one | The product field on a purchase order line. Pick a product with one variant and it fills in; pick one with several and a grid opens. | many2one | 1 |
| popover_widget | An icon in a cell that opens a popover when clicked, with the message, the icon, the color and the position all decided server side and shipped as JSON in a text field. | char | 1 |
| replenishment_graph_widget | The saw-tooth stock curve on a reordering rule, drawn against its minimum and maximum lines. New in Odoo 19, and it replaced a widget that showed history instead of a forecast. | char | 1 |
| sml_x2_many | The detailed operations list on a stock move. Its Add a line does not create an empty row: it opens the quants that actually hold the product, filtered to what is left after the lines you have already typed. | one2many, many2many | 1 |
| stock_action_field | A quantity or an amount that is also a link. Click the On Hand figure on a product list and it opens the stock view for that product, with context. | float, monetary | 1 |
| stock_move_one2many | The operations list on a transfer. Its distinguishing feature is a button that adds every line in a package at once, and it saves the whole picking before it can even offer that. | one2many, many2many | 1 |
| stock_picking_many2many | The transfers list on a wave. Adding one does not link a record directly: it opens a selection, creates a wizard, and lets the server attach them properly. | many2many | 1 |
| time_period_selection | A selection whose labels are written when the page loads. Instead of "last year, month plus one" it says "February 2025", which is the difference between a setting people use and one they avoid. | selection | 1 |
Each widget page has the usage XML, Studio steps, every developer option, and a per-version compatibility table verified against the shipped Odoo source.
Other widget categories
Need these working in your Odoo?
The team that documented every widget also builds with them — custom views, upgrades and performance work by senior Odoo developers.
