Appearance
Odoo Studio Basics
What Is Odoo Studio?
Odoo Studio is a no-code customization tool that lets functional consultants modify Odoo without writing code. With it you can:
- Add new fields to existing models
- Create new models (apps)
- Modify views (forms, lists, kanban, etc.)
- Create automated actions
- Build PDF reports
- Add approval workflows
- Export/import customizations
Available in: Odoo Enterprise only
Studio vs Custom Development
| Approach | When to Use | Pros | Cons |
|---|---|---|---|
| Studio | Simple customizations | No code, instant deploy | Limited logic, hard to version |
| Custom Module | Complex features | Full power, version controlled | Requires developer |
| Both | Common pattern | Studio for views, code for logic | Need coordination |
For Functional Consultants
Studio is your primary tool for rapid customizations. Know when to use it and when to escalate to development.
Accessing Studio
- Enable Developer Mode (if not already)
- Settings → General Settings → Developer Tools → Activate Developer Mode
- Open Studio
- Click the Studio icon (paint palette) in the top menu bar
- Or press
Alt + Shift + Skeyboard shortcut
What You Can Do in Studio
Adding Fields
| Field Type | Studio Support | Notes |
|---|---|---|
| Text/Char | ✅ Full | Single line text |
| Text (multiline) | ✅ Full | Multi-line text area |
| Integer/Float | ✅ Full | Numeric fields |
| Monetary | ✅ Full | Currency amounts |
| Date/DateTime | ✅ Full | Date pickers |
| Boolean | ✅ Full | Checkbox |
| Selection | ✅ Full | Dropdown with fixed options |
| Many2one | ✅ Full | Link to another model |
| One2many | ✅ Full | Related records list |
| Many2many | ✅ Full | Multiple links |
| Binary | ✅ Full | File attachments |
| Image | ✅ Full | Image upload |
| HTML | ✅ Full | Rich text editor |
| Related | ✅ Full | Value from linked record |
| Computed | ⚠️ Limited | Simple formulas only |
Modifying Views
| View Type | What You Can Do | Limitations |
|---|---|---|
| Form View | Add fields, rearrange, add groups/pages | Some structural changes limited |
| List View | Add columns, reorder, set widths | Can't add inline editing for all types |
| Kanban View | Modify card content, colors | Template structure changes limited |
| Search View | Add filters, group by options | Complex domains need code |
| Calendar View | Change date fields, colors | Limited customization |
| Pivot/Graph | Add measures, dimensions | Advanced options limited |
Creating Applications
Studio can create entirely new applications (models):
- Click "New App" in Studio
- Define model name and menu location
- Add fields using drag-and-drop
- Configure views automatically generated
New App Limitations
- No computed fields with complex logic
- No Python constraints or onchange
- No custom buttons with code
- No workflow beyond simple states
For complex apps, start in Studio then export for developer enhancement.
Form View Customizations
Rearranging Fields
- Open form in Studio
- Drag fields to new positions
- Use Groups to create columns
- Use Tabs (Notebook/Pages) for organization
Adding Smart Buttons
Smart buttons appear at the top of forms showing counts/links:
- In Studio, go to form view
- Click the Smart Buttons area
- Add new button linking to related records
- Configure display (count, icon, label)
Conditional Visibility
Make fields visible/invisible based on conditions:
- Select a field in Studio
- In properties panel, find "Invisible"
- Add condition like
state != 'draft'
Making Fields Required/Readonly
- Select field
- Set Required or Readonly property
- Add conditions for conditional behavior
List View Customizations
Setting Column Widths
- Open Studio on your list view
- Click on the column/field you want to resize
- In properties panel, find "Column Width (px)"
- Enter a value like
150for 150 pixels
Recommended widths:
| Field Type | Suggested Width |
|---|---|
| Date fields | 100px |
| Reference numbers | 120px |
| Selection/Status | 100px |
| Names | 200px |
| Descriptions | 300px |
| Monetary amounts | 120px |
TIP
If left empty, Odoo auto-computes optimal width based on content.
Row Decorations
Add color coding to list rows:
- In list view properties
- Set Decorations with conditions
- Example:
decoration-dangerwhendate_due < current_date
Optional Columns
Let users choose which columns to display:
- Select a column
- Enable "Optional" property
- Choose default: show or hide
Automated Actions in Studio
Creating Email Notifications
- Go to model in Studio
- Click Automations tab
- Create new automation
- Set trigger (on create, update, etc.)
- Add Send Email action
- Configure template
Updating Field Values
- Create automation with trigger
- Add Update Record action
- Select field and new value
- Can use expressions like
datetime.now()
Webhook Notifications
- Create automation
- Add Send Webhook action
- Configure URL endpoint
- Select fields to send
Approval Workflows
Studio can add simple approval processes:
Setting Up Approvals
- Open model in Studio
- Add a Selection field for status (draft, pending, approved)
- Create Automated Actions for transitions
- Add buttons for approve/reject actions
Example: Purchase Approval
Draft → Submit for Approval → Approved
↓
Rejected- Add
approval_stateselection field - Add
Submitbutton that changes state - Create automation to notify approver
- Add
Approve/Rejectbuttons (visible only to approvers)
Reports in Studio
Creating PDF Reports
- In Studio, go to Reports section
- Click Create Report
- Choose report type (PDF, Excel)
- Design layout using drag-and-drop
Report Elements
| Element | Use For |
|---|---|
| Text | Static labels, titles |
| Field | Dynamic data from record |
| Image | Logos, product images |
| Table | Line items, One2many data |
| Subtotal/Total | Calculated sums |
Adding to Print Menu
Reports created in Studio automatically appear in the Print menu for that model.
Exporting and Importing Studio Changes
Export Customizations
- In Studio, click Export
- Choose which customizations to include
- Download as a module (zip file)
Import Customizations
- Install the exported module on target database
- Or in Studio, click Import
- Upload the exported zip
Version Control
Studio changes are stored in the database, not in files. Always export before major changes and keep backups. Consider converting to proper modules for production.
Studio Best Practices
Documentation
| What to Document | Where |
|---|---|
| Field purpose | Field help text |
| Automation logic | Automation description |
| View changes | Changelog document |
| Report layouts | Screenshots/notes |
Testing
- Always test in staging first - Never experiment in production
- Test edge cases - Empty values, special characters
- Test automations - Verify triggers and actions
- Test permissions - Different user groups
Organizing Changes
- Group related changes - Don't scatter modifications
- Use meaningful names -
x_approval_datenotx_field_1 - Add field help text - Users need guidance
- Keep it simple - Complex logic belongs in code
When to Escalate to Development
| Requirement | Studio | Development |
|---|---|---|
| Add simple field | ✅ | |
| Rearrange form | ✅ | |
| Simple email automation | ✅ | |
| Complex computed field | ✅ | |
| Custom Python logic | ✅ | |
| API integration | ✅ | |
| Complex workflow | ✅ | |
| Custom PDF layout | ✅ | |
| Performance optimization | ✅ |
Know Your Limits
Studio is powerful but has boundaries. If you find yourself fighting Studio to achieve something, it's time to involve a developer.
Troubleshooting Studio
Common Issues
| Problem | Likely Cause | Solution |
|---|---|---|
| Field not showing | Wrong view mode | Check form vs list |
| Automation not triggering | Condition wrong | Check filter domain |
| Can't add field type | Model restriction | Check if model supports it |
| Changes lost | Browser cache | Hard refresh, re-export |
| Performance slow | Too many fields | Optimize, use stored |
Resetting Changes
If Studio customizations cause problems:
- Export current state (backup)
- In Studio, use Reset to Default
- Or restore from database backup
- Or uninstall exported module
Knowledge Check
Q1: Can you create computed fields with complex Python logic in Studio?
Answer: No - Studio only supports simple formulas
Complex computed fields requiring Python code need custom development. Studio's computed fields are limited to basic arithmetic and simple field references.
Q2: How do you make a field visible only when status is "draft"?
Answer: Set the Invisible property with condition state != 'draft'
In Studio, select the field and in properties panel, set Invisible to state != 'draft'. The field shows when state equals draft and hides otherwise.
Q3: Should you test Studio changes in production?
Answer: Never - Always test in staging first
Studio changes take effect immediately. Always test in a staging/development environment first to avoid disrupting production users.
Q4: How do you preserve Studio customizations for deployment?
Answer: Export as a module and install on target database
Studio changes are stored in the database. Use Export to create a module (zip file), then install that module on other databases to replicate changes.
Q5: When should you escalate from Studio to custom development?
Answer: When requiring complex logic, API integration, or custom Python
Studio handles simple fields, view modifications, and basic automations. Complex computations, external integrations, and advanced workflows need developer involvement.