Files
Vinta ChenandClaude e1875b6b2b docs: rewrite ERP category intro
The ERP category lists one project, Odoo, but the intro's "How to choose" list compared Odoo editions and hosting options as if they were picks.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-21 23:13:13 +08:00

3.7 KiB

Install several Odoo apps, like CRM, accounting, and inventory, and they combine into an open source Python ERP that your own modules extend.

In Odoo, everything starts and ends with modules: each app you install is one, and so is each change you make. Odoo Community is the free and open source edition. Enterprise is extra modules installed on top of Community, and its license allows running it only with an Enterprise subscription.

Where you host Odoo decides whether your own Python code runs on it. Odoo Online doesn't run custom modules, but Studio customizes Odoo there without code. Odoo.sh, Odoo's official cloud platform, deploys your modules from a branch of your GitHub repository. Your own server runs whatever modules its addons path points to.

To develop modules, Odoo's developer docs prefer a source install, which runs Odoo from its source code. Keep your modules in a directory of their own, and start the server with odoo-bin, adding that directory to --addons-path. Then work through Server framework 101, which builds one module from scratch.

A module is a Python package whose __manifest__.py names the module and the modules it depends on. Business objects are Python classes extending Model, whose fields the ORM maps to database columns. Give each model access rights, since without them, no user can access its data.

To change an app Odoo ships, extend it from your own module instead of editing its code. Model inheritance adds fields and overrides methods on a model another module defines, and view inheritance applies your extension views on top of the originals. When a feature joins two apps, put it in a link module, so each app still installs on its own.

Before you write a module, check whether Odoo already covers the case. A database with custom modules can't be upgraded until they're ready for the new version, so each module you skip is one less to port.