Skip to main content
iVentureTeam

many2one_account_account

Picking an account is the most repeated action in Odoo accounting. This widget makes one change to the dropdown: it stops offering Search more unless you typed a number.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 27, 20266 min read
Technical namemany2one_account_account
Field typesmany2one
Viewslist, form
Moduleaccount, present wherever Invoicing or Accounting is installed
Used in core1 occurrence, the account column on invoice lines in account
VersionsOdoo 20.0, Odoo 19.0
No-code setupNo. Studio offers the plain relation picker; this variant is set in view XML
Alternativesmany2one, many2one_barcode, res_partner_many2one, account_type_selection

What the account picker does

The chart of accounts is a long list where every entry has a code and a name, and people search it both ways. Typing a code fragment is a numeric search that should offer to open the full list; typing a word is usually enough to find the account in the dropdown itself.

Odoo's standard relation picker does not know the difference, so it always shows a Search more entry at the bottom of the results. On the account column of an invoice line, where the dropdown is opened dozens of times a day, that extra row is noise most of the time.

This widget removes it selectively. It subclasses the autocomplete used by the relation picker and suppresses the Search more suggestion unless the typed text contains at least one digit. Everything else about the field, the search itself, the options, the saving, is the standard relation picker.

What this means for your team

This is a small ergonomics change on the single most repeated interaction in accounting data entry. Encoding a bill means choosing an account per line, and every removed row in a dropdown is a fraction of a second and a fraction of a decision. Odoo made that change deliberately for one column, which is a good example of where interface work pays: not everywhere, but on the thing your team does a hundred times a day.

The second half is just as practical. When someone does type a code and wants the full list, the search dialog opens with the typed text already applied as a name filter, so the list is pre-narrowed instead of starting from the whole chart. That is the difference between a search dialog being a detour and being a shortcut.

Supported options in Odoo 19

The widget is registered through the shared many2one description builder, so it declares the full many2one option set and adds none of its own. The options below are the declared ones; the extractor also reads two further keys that are undeclared even on the base widget. Read from the widget's source and many2one_field.js, Odoo 19.0.

OptionTypeWhat it does
no_openbooleanInherited. Removes the internal link that opens the account record. Core sets it on the invoice line column.(default: false)
no_createbooleanInherited. Removes both creation paths from the dropdown.(default: false)
no_quick_createbooleanInherited. Removes creation from the typed text while keeping the popup form path. Core sets it here.(default: false)
no_create_editbooleanInherited. Removes the create-and-edit popup while keeping creation from typed text.(default: false)
search_thresholdnumberInherited. Minimum number of typed characters before the search runs; without it the search fires on focus.
placeholder_fieldfieldInherited and declared on the base widget. Names a field whose value is shown as a hint.
create_name_fieldfield<strong>Inherited and undeclared on the base widget too.</strong> Field the typed text is written into when quick-creating.
can_scan_barcodeboolean<strong>Inherited and undeclared on the base widget too.</strong> Enables the barcode scan affordance on the autocomplete.(default: false)

The digit rule is not configurable. Whether Search more appears depends only on whether the typed text contains a digit, and there is no option to change or disable it. If you need the standard behavior, use the plain relation picker on that column.

Working examples

The core usage, trimmed

<field name="account_id"
       widget="many2one_account_account"
       groups="account.group_account_readonly"
       options="{'no_quick_create': True, 'no_open': True}"
       required="display_type not in ('line_section', 'line_subsection', 'line_note')"/>

Creation from the dropdown is off, and so is opening the account record from the cell. Both are inherited many2one options.

Narrowing which accounts are offered

<field name="account_id" widget="many2one_account_account"
       domain="[('account_type', 'not in',
                 ('asset_receivable', 'liability_payable', 'off_balance'))]"/>

The domain is a plain field attribute; the widget does not touch it. Core also passes several search defaults through context so the dialog opens usefully filtered.

With a typeahead threshold

<field name="account_id" widget="many2one_account_account"
       options="{'search_threshold': 2, 'no_open': True}"/>

All the standard many2one options are available, since the widget is built from the shared description builder.

Three subclasses to change two methods

Three classes stacked on top of each other, each replacing one component in the one below. The autocomplete is subclassed to change two methods, the relation component is subclassed to use that autocomplete, and the field component is subclassed to use that relation component. The registration then wraps the field component in the shared many2one description, which is what supplies the option list and the extractor.

The first overridden method decides whether to add the Search more suggestion. It defers to the standard behavior when the request contains a digit and otherwise returns early, so the suggestion is skipped. The regular expression is a plain digit test, which means an account name containing a number, say a cost centre suffix, will bring the entry back.

The second overridden method is what happens when Search more is used. Instead of the default handling it sets a name search default into the context when the request is non-empty, builds a titled dialog and opens the select-or-create view. The practical result is the dialog opening with the typed text already applied rather than an unfiltered chart of accounts.

Nothing else is changed. Creation, opening, the domain, the barcode affordance and the typeahead threshold all behave exactly as they do on the plain relation picker, because they come from the shared description that the registration spreads.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. The development branch renames the widget and adds a parent-field option plus a link-suppression rule.
Odoo 19.0VerifiedFirst version. Verified against the shipped source.
Odoo 18.0Not availableWidget does not exist. The account column used the plain relation picker.
Odoo 17.0Not availableWidget does not exist.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. The widget is new in Odoo 19, so there is nothing to migrate from earlier versions; Odoo 18 and before used the plain relation picker on that column. Going forward is the harder direction, because the name changes on the development branch. See the Odoo 20 section.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this can still change; we re-verify the page after release.

The widget is renamed. On the development branch the file, the folder and the registered name all change to a more general cell-oriented name, and the invoice line view is updated to use it. The two overridden autocomplete methods survive unchanged, so the digit rule and the seeded search dialog behave exactly as they do today.

Two things are added. A parent_field option, which names the relation the row belongs to, and a rule that suppresses the clickable link on the cell while the parent list is editable, so an account only renders as a link once the document is no longer being edited.

A view carrying the current widget name will not resolve on Odoo 20, so it falls back to the plain relation picker: the dropdown keeps working and the digit rule is silently lost. Search your custom views for this name before upgrading.

Common problems and fixes

SymptomCause and fix
Search more never appears in the dropdownIntended. The suggestion is suppressed unless the typed text contains a digit. Type part of the account code, or use the plain relation picker on that column.
Search more appears on a plain word searchThe typed text contains a digit, for example an account name with a numeric suffix. Expected. The rule is a simple digit test on the request.
The search dialog opens unfilteredThe typed text was empty when Search more was used. Type before opening the dialog; the request is applied as a name filter.
Users cannot see the account column at allCore restricts the field to the accounting read group. Add the users to that group if they should see accounts on invoice lines.
The dropdown will not let me create an accountThe core usage passes no_quick_create, an inherited many2one option. Remove the option in an inherited view if creation from the line is genuinely wanted.
The behavior disappeared after upgradingThe widget is renamed on the Odoo 20 development branch, so the old name no longer resolves and the field falls back to the plain relation picker. Update custom views to the new widget name during the upgrade.

Account picker vs the alternatives

WidgetBest forKey difference
many2one_account_accountAccount columns where users search the chart of accounts all daySuppresses Search more unless the request contains a digit, and seeds the search dialog with the typed text
many2oneEvery other relationAlways offers Search more, and does not seed the dialog with the typed text
many2one_barcodeRelations picked with a scannerAdds a scan affordance rather than changing the search suggestions
res_partner_many2onePartner fieldsA partner-specific picker with its own display rules
account_type_selectionChoosing an account type rather than an accountA selection widget grouping types by prefix, not a relation

Use the plain relation picker everywhere the extra behavior is not wanted, and remember that the two most useful controls on an account column, disabling creation and disabling opening, are ordinary many2one options that work on any widget. This one is worth naming only where users search the chart of accounts constantly.

Frequently asked questions

What does many2one_account_account actually change?+
Two methods on the dropdown's autocomplete. The Search more suggestion is skipped unless the typed text contains a digit, and when it is used the search dialog opens with the typed text applied as a name filter.
Why can I not see Search more?+
Because you typed letters only. Type part of an account code, or any text containing a digit, and the suggestion comes back.
Does it support the usual many2one options?+
All of them. It is registered through the shared many2one description builder, so no_open, no_create, no_quick_create, no_create_edit, search_threshold and placeholder_field all work, plus two keys undeclared even on the base widget.
Is it available before Odoo 19?+
No. It is new in Odoo 19; earlier versions used the plain relation picker on the account column.
What happens to it in Odoo 20?+
It is renamed on the development branch to a more general cell widget with a parent-field option. A view still carrying the old name will silently fall back to the plain relation picker, so update custom views during the upgrade.

Is data entry the slowest part of your accounting?

Chart of accounts design, default accounts on products and the small view changes around them decide how long a bill takes to encode. We tune Odoo Accounting for the volume you actually process, on versions 16 through 19.

Book a free consultation

How this page was produced

The two overridden autocomplete methods, the digit test and the seeded search dialog were read from many2one_account_account.js on the Odoo 19.0 branch, and the inherited option set from many2one_field.js in the same branch. The usage, its group restriction and its options come from account/views/account_move_views.xml. The rename, the new option and the link rule were read from the replacement file on the public development branch and its updated view. Spotted an error? Tell us and we will correct the page.