| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 366 |
| Technical Name |
qt_import_match_key |
| License | LGPL-3 |
| Website | https://odootips.com |
| Versions | 16.0 17.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 366 |
| Technical Name |
qt_import_match_key |
| License | LGPL-3 |
| Website | https://odootips.com |
| Versions | 16.0 17.0 19.0 |
Odoo 19 Community & Enterprise
Odoo's native import resolves relations only by name, External ID or Database ID. This module lets any stored field of any model become an import key — products, contacts, employees, locations, accounts, taxes, journals, projects, tasks… anything Odoo can import.
- ✔ Works on any Odoo model — native or custom
- ✔ Works with any stored
charorintegerfield - ✔ CSV, XLS & XLSX — same native importer
- ✔ Multi-company aware (global / current / shared)
- ✔ Stops on ambiguous or missing matches — never silent
- ✔ 32 automated tests — production-grade
any_m2o_field/id __export__.res_xyz_17 __export__.res_xyz_42 base.pe
any_m2o_field/<your_field> ABC-001 ABC-002 PE
Only base_import is required. The module doesn't target specific models — it extends Odoo's core importer so every importable model benefits instantly, native or custom.
char or integer field.
Reference codes, short names, external keys, legacy IDs, barcodes, anything you already rely on.
Watch the full workflow in action — configure a key, import a file, see the records appear.
Step 1 — Open Import Keys
Settings → Import Keys
A dedicated menu is added to the Settings top bar. The list shows every Related Model you have configured and the number of keys on each one. Click New to create your first rule.
Step 2 — Configure the rule
Two blocks in the form:
Contact, Product, a custom model).
vat and ref on Contact).
Step 3 — Import your file
Open any list view and pick Favorites → Import records. Upload your CSV / XLS / XLSX. On the relational column, open the Odoo Field dropdown — your configured keys now appear alongside the native options (Database ID, External ID).
dni column matched against Customer / Tax ID.
Step 4 — Records imported
When everything resolves cleanly, Odoo shows a confirmation toast with the number of records imported, and the records are already in the list — ready to use.
Examples — the same recipe, any model
The table below shows the pattern across different Odoo models. Replace model and field with whatever your own import needs — the workflow is identical.
| Model | Match field | CSV header |
|---|---|---|
res.partner (Contact) | vat | partner_id/vat |
res.country | code | country_id/code |
product.product | default_code | product_id/default_code |
stock.warehouse | code | warehouse_id/code |
stock.location | complete_name | location_id/complete_name |
account.account | code | account_id/code |
account.journal | code | journal_id/code |
hr.employee | identification_id | employee_id/identification_id |
x_my_custom_model | x_legacy_code | x_custom_id/x_legacy_code |
<m2o_field>/<your_field> in the file header.
⚙ Installation
- Odoo 19.0 (Community or Enterprise)
- Module
base_import(bundled with Odoo) - Custom-addons capable hosting: self-hosted or Odoo.sh
- No extra Python packages
- Copy
qt_import_match_key/into your addons path. - Restart the Odoo service.
- Go to Apps, click Update Apps List.
- Search Import Match Keys and press Install.
Compatibility matrix
| Edition | Hosting | Supported |
|---|---|---|
| Community | Self-hosted | ✔ Yes |
| Enterprise | Self-hosted | ✔ Yes |
| Enterprise | Odoo.sh | ✔ Yes |
| Enterprise | Odoo Online (SaaS) | ✘ No — custom addons not allowed |
❓ Frequently Asked Questions
char or integer. Computed non-stored fields are not eligible
— they can't be searched efficiently and could produce inconsistent lookups.
order_line/product_id/default_code
resolve through the match key too — useful when importing entire documents (sale orders, purchase orders, BoMs…) in a single file.
company_id field. The selector only appears when the database has more than one company —
single-company databases see a simplified form.
- Community (self-hosted) ✔
- Enterprise on-premises (self-hosted) ✔
- Odoo.sh (cloud-managed) ✔
- Odoo Online (SaaS) ✘
search() on stored fields, the same code path used everywhere else.
Columns mapped to native options trigger no extra queries.
translate=True, so extra languages propagate automatically via .po files.
📧 Support & Guarantees
Quality Guaranteed
32 automated tests covering configuration, import, multi-company and i18n. If you find a bug, we fix it.
Fast Response
We answer within 24 hours on business days. Most issues resolved in under 48 hours.
Free Updates
Bug fixes and improvements are published as updates on Odoo Apps. Download anytime.
📞 Contact Us
🌐 Website
odootips.com- Your Odoo version (19.0.x.y.z)
- Module version (from Apps → module info)
- The related model and match field you configured
- A sample of the file you are importing (a few rows is enough)
- Screenshots of the error dialog
Please log in to comment on this module