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.
| Technical name | package_m2m |
|---|---|
| Field types | many2many |
| Views | list, form |
| Module | stock, the Inventory app |
| Used in core | 1 occurrence, the packages column of the operations list in stock |
| Versions | Odoo 20.0, Odoo 19.0 |
| No-code setup | No. It reads a picking-specific companion field and is intended as read-only |
| Alternatives | many2many_tags, package_m2o, sml_x2_many, stock_move_one2many |
What the package tags cell does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
has_lines_without_result_package | companion field | Read by literal name at setup. When true, a synthetic No Package tag is added after the real packages. Read once, so it does not react to later changes.(since Odoo 19.0) |
name | injected related field | Added by the descriptor so each package's short name is available. Tags print this rather than the display name.(since Odoo 19.0) |
color_field | field | Inherited from the tags widget. Names an integer field used to color the tags; the synthetic tag inherits whatever the last real package had. |
The extra tag comes from a companion field. Whether the No Package tag appears is decided by a boolean on the move, read by literal name at setup. It is read once, so a change to that flag while the row is on screen does not add or remove the tag until the list is redrawn.
Working examples
A widget that deliberately never initializes its parent
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | Partial / changed | Not released. Reworked internally alongside the wider tags rework; the concept is unchanged. |
| Odoo 19.0 | Verified | First version. Verified against the shipped source. |
| Odoo 18.0 | Not available | Widget does not exist. |
| 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, with the rewritten operations list. On Odoo 18 and earlier the packages were shown differently on the transfer form, so an upgrade gains the column with the standard views and no migration is needed.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The No Package tag never appears | The move does not carry the companion flag, which is read by literal name and not declared as a dependency. Make sure the field exists and is loaded on the move. |
| The field cannot be edited | Intended. The widget never initializes the tags widget's editing machinery, and the core view marks it read-only. Assign packages on the detailed operations instead. |
| Making it editable renders a broken input | Same cause: the parent initialization was never run. Leave the field read-only, or use the plain tags widget if editing is genuinely required. |
| The No Package tag has an odd color | It copies the properties of the last real package in the list. Expected. It is a synthetic tag with no record of its own. |
| The column is missing | The user is not in the package tracking group, which gates the field in the core view. Enable package tracking and add the user to that group. |
| Tags show short names, not full ones | The widget prints the package's name field, injected as a related field, rather than its display name. Expected, and deliberate, to keep the column narrow. |
Package tags cell vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
package_m2m | Seeing at a glance which packages a transfer line touches, and whether anything is unpacked | Adds a synthetic No Package tag and is display only by design |
| many2many_tags | An editable list of related records as tags | Fully wired for editing, and no No Package concept |
| package_m2o | A single package relation | One package rather than a set |
sml_x2_many | Assigning packages on the detailed operations | Where packages are actually set, rather than summarized |
| stock_move_one2many | The list this column lives in | The list widget rather than a cell |
Frequently asked questions
What is the No Package tag?+
Why can I not edit the packages here?+
Why do the tags show short names?+
Why does the No Package tag have a strange color?+
Which versions have it?+
Packing that matches what the paperwork says
Packages, pallets and partially packed transfers are where warehouse accuracy is won or lost. We configure Odoo Inventory package handling and the documents that follow it, on versions 16 through 19.
Book a free consultation