many2many_tags_banks
Partner bank accounts rendered as tags, each showing whether outgoing payments are allowed. It also saves the partner behind your back, and there is a good reason for that.
| Technical name | many2many_tags_banks |
|---|---|
| Field types | many2many, one2many |
| Views | form |
| Module | account, present wherever Invoicing or Accounting is installed |
| Used in core | 1 occurrence, the bank accounts field on the contact form in account |
| Versions | Odoo 20.0, Odoo 19.0 |
| No-code setup | No. The option names a companion field, which Studio cannot configure |
| Alternatives | many2many_tags, many2many_tags_avatar, one2many, res_partner_many2one |
What the bank tags field does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
allow_out_payment_field | string (field name) | Names a boolean field on the bank account model. The widget injects it into the related fields it loads, marked writable, and passes its value to each tag as the outgoing payment indicator. Declared in the source as a boolean, which describes the field it points at rather than the option itself.(since Odoo 19.0) |
color_field | field | Inherited from the color-editable tags widget. Names the integer field holding each tag's color. Core sets it here. |
edit_tags | boolean | Inherited. Makes clicking a tag open the bank account record. Core sets it here.(default: false) |
no_create | boolean | Inherited. Removes creation from the tag input entirely.(default: false) |
no_quick_create | boolean | Inherited. Removes creation from the typed text while keeping the popup form path.(default: false) |
create_name_field | field | Inherited. Field the typed text is written into when quick-creating a tag. |
The declared type of the new option is misleading. It is announced as a boolean, but the value it takes is the technical name of a boolean field, which the widget then injects into the related fields it loads and reads per tag. Passing an actual boolean will not work; pass the field name, as the core contact form does.
Working examples
How the indicator field gets loaded, and why the partner saves
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. The development branch rebases it onto the plain tags widget and rebuilds the tag as a dedicated badge component. |
| 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, so there is nothing to migrate from earlier versions; the contact form used a plain relational field before. Going forward, the base it extends changes on the development branch, so any custom module patching this widget should expect the color-editing layer to be gone.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| No outgoing payment indicator on the tags | The allow_out_payment_field option is missing, so the widget has no field to read. Add options="{'allow_out_payment_field': 'allow_out_payment'}" or your own boolean field name. |
| The contact saves itself when I open the form | The widget saves the root record on mount when it is dirty, so an inline-created partner exists before accounts are attached. Expected. Finish the contact before adding bank accounts if the timing matters. |
| New bank accounts are not linked to the contact | The field's context does not set the partner default. Add context="{'default_partner_id': id}" as the core view does. |
| Tags cannot be recolored | The color_field option is missing, or the database is on a version where the base no longer offers color editing. Set color_field to the color integer on the bank account model. |
| Passing True to the indicator option does nothing | The option takes a field name, despite being declared as a boolean. Pass the technical name of the boolean field instead. |
| The tag list shows accounts of other partners | The field has no domain restricting it to the current contact. Add domain="[('partner_id','=', id)]" as the core view does. |
Bank tags field vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
many2many_tags_banks | Partner bank accounts shown compactly with their outgoing payment status | Tags carrying an indicator from a nominated boolean field, plus an automatic save of the parent record on mount |
| many2many_tags | Any ordinary many2many rendered as tags | No indicator, no injected related field and no automatic save |
| many2many_tags_avatar | Tags representing people | Renders avatars rather than a status indicator |
| one2many | Editing bank accounts in place with their full field set | An embedded table rather than a selection control |
| res_partner_many2one | Choosing the partner itself | A single relation picker, not a tag list |
Frequently asked questions
What does the indicator on each bank tag mean?+
Why does the contact save itself?+
The option is declared as a boolean. Do I pass True?+
Can I still recolor the tags?+
Which versions have it?+
Supplier bank changes are how invoice fraud gets paid
Approval flows on bank accounts, outgoing payment controls and the audit trail behind them are configuration, not luck. We set up payment controls in Odoo Accounting on versions 16 through 19, and document who can change what.
Book a free consultation