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.
| Technical name | move_product_label_field |
|---|---|
| Field types | many2one |
| Views | list, inside the operations list |
| Module | stock, the Inventory app |
| Used in core | 1 occurrence, the product column of the operations list in stock |
| Versions | Odoo 20.0, Odoo 19.0 |
| No-code setup | No. It reads a picking-specific description field and the parent transfer's state |
| Alternatives | product_label_section_and_note_field, many2one, sol_product_many2one, stock_move_one2many |
What the move product cell does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
description_picking | field on the move | Read by literal name. Rendered under the product, unless it is identical to the product's display name, in which case it is treated as empty.(since Odoo 19.0) |
no_open | boolean | Inherited from the relation field. Removes the link that opens the product record.(default: false) |
no_create | boolean | Inherited. Removes creation from the product dropdown.(default: false) |
no_quick_create | boolean | Inherited. Removes creation from the typed text while keeping the popup form path.(default: false) |
search_threshold | number | Inherited. Minimum typed characters before the product search runs. |
Two things are read by literal name. The description comes from the move's picking-specific description field, and the read-only decision reads the parent record's state through the evaluation context. The second means the widget only behaves correctly inside a form that has such a parent; on a standalone list the parent lookup has nothing to read.
Working examples
Why an identical description is treated as no description
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Behavior identical on the development branch; internals follow the shared component. |
| Odoo 19.0 | Verified | First version, with the rewritten operations list. Verified against the shipped source. |
| Odoo 18.0 | Not available | Widget does not exist. The product column was a plain relation field. |
| Odoo 17.0 | Not available | Widget does not exist. |
| Odoo 16.0 | Not available | Widget does not exist. |
Upgrade note. The widget is new in Odoo 19, together with the rewritten operations list. On Odoo 18 and earlier the product column used a plain relation field and the description was a separate column, so an upgrade changes the appearance of the operations list without needing any view change.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The description never shows | It is identical to the product's name, which the widget treats as empty. Expected. Edit the description to something different and it appears. |
| The description cannot be edited on a locked transfer | The field is read-only and the transfer is done or canceled, which is the only combination that locks the description. Expected. Reset the transfer to draft if the paperwork genuinely has to change. |
| An error about reading the parent state | The widget is used outside a form that provides a parent record. Use it only inside the operations list on a transfer form, or use a plain relation field. |
| The description column is missing entirely | The move does not carry the picking description field. Make sure the field exists on the model; the widget reads it by literal name. |
| The add label affordance does not appear | It is offered only when the description is editable, the column shows both product and label, and there is no description yet. Check all three conditions. |
| Typed descriptions are altered on save | Something other than this widget is parsing the value; this one keeps it verbatim. Check for a customization on the description field. |
Move product cell vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
move_product_label_field | The product column on transfer operations, with its delivery description | Hides the description when it repeats the product name, and unlocks it unless the transfer is finished |
| product_label_section_and_note_field | The product cell on sales and purchase documents | Same idea without the picking description or the parent state check |
| many2one | A plain product relation | No description underneath and no parent dependency |
| sol_product_many2one | The product cell on sale order lines | Adds combo and configurator handling instead |
| stock_move_one2many | The list this cell lives in | The list widget rather than a cell |
Frequently asked questions
Why is the delivery description not shown?+
When can the description be edited?+
Can I use it outside a transfer?+
Which options does it accept?+
Which versions have it?+
Delivery paperwork that says what your customer needs
Line descriptions, packing instructions and document layouts are small settings with a direct effect on delivery disputes. We tune Odoo Inventory documents and the data behind them, on versions 16 through 19.
Book a free consultation