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.
August 24, 2026Updated August 24, 20265 min read
| Technical name | pick_from |
|---|---|
| Field types | many2one (stock.quant) |
| Views | list (detailed operations lines), form |
| Module | stock |
| Used in core | 3 occurrences across 2 modules: detailed operations in stock and batch transfers in stock_picking_batch |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0 |
| No-code setup | No. Applied via the widget attribute in view XML |
| Alternatives | package_m2o, many2one_barcode, many2one |
What the Pick From field does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
no_open | boolean | Inherited from many2one and set by core here: removes the link to the quant form, which warehouse users have no business opening mid pick. |
no_create | boolean | Inherited from many2one and set by core here: quants describe physical reality and are never created from this column. |
no_quick_create | boolean | Inherited from many2one. Redundant once no_create is set, available if you relax creation. |
no_create_edit | boolean | Inherited from many2one. Removes the create and edit dialog path only. |
search_threshold | integer | Inherited from many2one, new in 19.0. Minimum characters before the quant search runs; useful on huge warehouses to avoid loading every quant on focus.(since Odoo 19.0) |
placeholder_field | field name | Inherited from many2one, new in 19.0. Rarely relevant here because the synthetic display name occupies the empty state.(since Odoo 19.0) |
can_scan_barcode | boolean | Inherited and undocumented: read in the many2one extractProps only. Lets mobile users fill the field by scanning. |
create_name_field | field name | Inherited and undocumented: read in the many2one extractProps only. Irrelevant while creation is disabled. |
The synthetic fallback name is display only: it does not create or reference a quant, and saving the line with id 0 stores an empty quant_id.
Working examples
The synthetic name, and the owner that never shows
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Props system migration only on the development branch; see below. |
| Odoo 19.0 | Verified | Verified against the shipped source. Component rewrite, state dependency and done state package shortening added. |
| Odoo 18.0 | Verified | Identical to 17.0: subclass overriding the value getters, no package shortening. |
| Odoo 17.0 | Verified | Introduced here alongside the quant based detailed operations. |
| Odoo 16.0 | Not available | Does not exist. Move lines edited location, lot and package as separate columns. |
Exists since 17.0. Views carried from 17 or 18 keep working on 19; the display name simply gets the smarter package handling.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The consignment owner never shows in the Pick From text | The widget reads data.owner while the field is owner_id; the value is never populated, a source level mismatch present since 17.0. Show the owner_id column separately, or patch _quant_display_name in a custom module to read owner_id. |
| The column is empty on a new manual line | The synthetic name needs the line's location or lot or package data; a brand new line has none yet. Pick a quant from the dropdown, or fill the location first and the fallback text appears. |
| Users create junk quants from the picker | A custom view dropped the no_create option core sets. Restore options="{'no_create': True, 'no_open': True}" on the quant_id field. |
| Package names look different on done transfers | Intended: after done or cancel the widget keeps only the last segment of the package path. No action needed; the full path is visible on the quant itself. |
Pick From field vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
pick_from | The Pick From column on detailed operations | Many2one over quants with a synthetic location, lot and package fallback name |
| package_m2o | Source and destination package columns | Context keys switch which package path the display name shows |
| many2one_barcode | Filling a relation by scanning on mobile | Forces barcode scanning on; no synthetic fallback display |
| many2one | Any plain relational column | Empty means blank; no client side name building |
Frequently asked questions
What does the Pick From column actually store?+
Why can I not create a new entry in the Pick From dropdown?+
Does picking a different quant move my reservation?+
Is pick_from available in Odoo 16?+
Warehouse picks not matching what the system reserved?
Reservation methods, removal strategies and the detailed operations UX decide whether pickers trust Odoo or fight it. We tune FIFO and FEFO flows, fix custom transfer views, and extend widgets like this one when your putaway logic needs to surface in the pick list.
Tune your Odoo warehouse flows