Ad – 728×90
🎨 Odoo Studio

Creating Custom Models and Apps in Odoo Studio

Studio doesn't just extend existing apps — it can create entirely new ones from scratch. The New App wizard walks you through naming your app, creating its underlying model, and generating the default form, list, and kanban views in minutes. This page covers the full process from wizard to working app, including access rights and the limitations you'll hit if requirements become complex.

⏱️ 22 min 🎯 Beginner 📅 Updated 2026

Creating a New App

To create a brand-new application with Studio:

  1. Click the main menu (grid icon) to go to the home screen.
  2. Click the Studio icon (pencil) — this opens the Studio home, not tied to any specific app.
  3. Click New App.
  4. The wizard asks for:
    • App name — shown in the menu (e.g., "Equipment Requests")
    • Menu icon — pick from the icon palette
    • Menu color — background color for the app tile
  5. Click Build your app. Studio creates the app, model, and views and drops you into Studio mode on the new app's form view.

Creating a New Model

When you use the New App wizard, Studio automatically creates an underlying model. The model technical name follows the pattern x_<app_name_snake_case>. For example, an app named "Equipment Requests" gets the model x_equipment_requests.

You can also create additional models from within an existing Studio session by using the New Model option under the Views tab in the left panel. This is useful when you need related sub-models (e.g., a "Request Line" model linked to the main model).

💡
Automatic fields

Every new Studio model comes with a default set of built-in fields: id, name (display name), create_date, write_date, create_uid, write_uid, and active (for archiving). You don't need to add these — they come automatically.

Adding Fields to Your Model

After the wizard completes, you land on the empty form view of your new model. Add fields exactly as described in the Custom Fields page:

  • Use the Components tab to drag a New Field onto the form.
  • Choose the type and configure properties.
  • Repeat for all the fields your model needs.

You can also add a Status Bar component from the Components tab to give the model a pipeline-style state machine (similar to sale orders or CRM leads). Studio creates a Selection field for the stages and adds the statusbar widget automatically.

Ad – 336×280

Configuring Views for Custom Models

Studio auto-generates three views for every new model:

View typeAuto-generated content
FormName field and chatter (messaging thread)
ListName column and creation date
KanbanName displayed on card, grouped by status if a statusbar exists

Use the Views tab in the Studio left panel to switch between these views and customize each one. Add, remove, and reorder fields as needed. You can also enable or disable view types (e.g., hide the kanban view if it isn't useful for your model) from the Views tab.

Access Rights for Custom Models

When Studio creates a new model and app, it also sets up access rights automatically. By default, all internal users (base.group_user) get full CRUD access to the new model. Studio manages this via ir.model.access records created in the background.

If you need more granular control:

  • Go to Settings → Technical → Security → Access Rights and filter for your model name (e.g., x_equipment_requests).
  • Modify or add access rules there.
  • Alternatively, export to a module (see Studio vs Module) and define proper res.groups and CSV access rules in code.
⚠️
Studio doesn't create user groups

Studio gives all internal users full access by default. It does not create app-specific user groups (e.g., "Equipment Manager" vs "Equipment User"). If you need role-based access for your custom app, you must set that up manually or export to a module and define groups in code.

Limitations of Studio Models

Studio models are powerful for simple data collection and tracking use cases, but they have important limitations you will eventually run into:

LimitationWorkaround
No Python methods or business logicExport to module and add Python code
No @api.constrains (validation rules)Use required fields as a substitute; complex validation needs Python
No @api.onchange (field triggers)Limited via Formula fields; full onchange needs Python
No scheduled actionsUse Studio Automations with time-based triggers instead
No ORM inheritance (_inherit)Must be a custom module to extend with Python
No custom widgetsUse available Studio widgets; custom widgets need JavaScript development
Not version-controlled by defaultExport to module ZIP and commit to git

When you hit these limitations, the right move is to export the Studio app as a module (using the Export button in Studio), unzip it, and extend it with Python code. The exported module includes all your fields and views as a starting point — you don't lose the work you did in Studio.

📋 Key Points

  • Use the New App wizard (from Studio home) to create an app, model, and default views in one step.
  • Studio model names get the x_ prefix (e.g., x_equipment_requests).
  • All internal users get full CRUD access to new Studio models by default — add granular access rights manually in Technical settings.
  • Auto-generated views: form (name + chatter), list (name + date), kanban — customize each from the Views tab.
  • Status Bar component creates a pipeline-stage field automatically.
  • Studio models cannot have Python logic, ORM constraints, onchange handlers, or inheritance — export to a module for those features.

FAQ

Can I create sub-menus under a Studio app? +

Yes. In Studio, open the app and click the Views tab in the left panel. There is a section for managing the app's menu structure. You can add sub-menu items pointing to list views of different models, allowing you to build a multi-section app with separate menus for, say, "Requests" and "Categories".

What happens to a Studio app when Studio is uninstalled? +

If Studio is uninstalled, Studio-created apps, models, and data are removed as well. This is a destructive operation. Before uninstalling Studio, export all your customizations as a module and install that module separately so your apps persist independently of Studio.

Can I add a chatter (messaging thread) to a Studio model? +

Yes. Studio automatically adds the chatter to new model forms. If you removed it, open the form in Studio, go to the Components tab, and drag the Chatter component back onto the form. The chatter requires the model to inherit mail.thread — Studio handles this automatically for new models.

Can I add a Studio model to an existing app (not a new one)? +

Yes. Open an existing app in Studio, go to the Views tab in the left panel, and use the "New Model" option to create a new model. Then add a sub-menu entry in the app's menu structure pointing to this new model. This way you extend an existing app with a new data object without creating a separate app icon.