Odoo Model Meta Attributes with Examples
This document provides a detailed explanation of the most important meta attributes in Odoo models, along with practical examples where applicable.
1. _name
- Purpose : Technical identifier of the model.
- Example :
_name = ‘library.book’ - This defines a new model accessible via self.env[‘library.book’].
2. _inherit
- Purpose : Used to extend an existing model.
- Example :
_inherit = ‘res.partner’ - This lets you add fields or override methods in res.partner.
3. _inherits
- Purpose : Delegation inheritance using a foreign key to another model.
- Example : _name = ‘student.record’ _inherits = {‘res.partner’: ‘partner_id’}
- partner_id = fields.Many2one(‘res.partner’, required=True)
- Fields of res.partner are accessible as if they belong to student.record.
4. _description
- Purpose : Human-readable name for the model.
- Example :
_description = ‘Library Book Master’ - Used in developer tools and admin UI.
5. _rec_name
- Purpose: Field shown in many2one dropdowns and views.
- Example :
_rec_name = ‘isbn_code’ - isbn_code = fields.Char(‘ISBN Code’)
- Instead of name, isbn_code will display as label.
6. _order
- Purpose : Default sorting order for records.
- Example :
_order = ‘published_date desc, name asc’
7. _sql_constraints
- Purpose: Define SQL constraints for uniqueness or checks.
- Example: _sql_constraints = [(‘unique_isbn’, ‘UNIQUE(isbn_code)’, ‘ISBN must be unique!’)]
8. _auto
- Purpose : Tells Odoo whether to create a table automatically.
- Default : True
- Example :
_auto = False # For SQL views
9. _table
- Purpose : Custom table name in the database.
- Example :
_table = ‘lib_book_master’
10. _log_access
- Purpose : Automatically creates create_uid, create_date, etc.
- Example :
_log_access = False - Useful in models like logs or system jobs.
11. _check_company_auto
- Purpose : Enables automatic company consistency checks.
- Example :
_check_company_auto = True - Ensures all related records belong to the same company.
12. _register
- Purpose : Controls whether a model is registered.
- Default : True
- Example : _register = False # Used in abstract models
13. _transient
- Purpose : Marks model as temporary (like wizards).
- Default : False
- Example :
_transient = True - Auto-deletes after a time period or on restart.
14. _constraints
- Purpose : Older method for Python-based validation (use @api.constrains instead).
- Example :
def _check_quantity(self):
for record in self:
if record.qty < 0:
return False
return True
_constraints = [(_check_quantity, ‘Quantity cannot be negative’, [‘qty’])]
✅ Summary Table
Attribute |
Purpose |
Common Use Case |
| _name | Defines model name | New custom model |
| _inherit | Extend existing model | Add fields to res.partner |
| _inherits | Delegated model composition | Create student.record from partner |
| _description | UI label for model | Label in developer tools |
| _rec_name | Record display field | Show code instead of name |
| _order | Default record order | Sort orders by date |
| _sql_constraints | Enforce uniqueness or data checks | Ensure email is unique |
| _auto | Auto-create DB table | Disable for views |
| _table | Custom DB table name | Use log_entry_table |
| _log_access | Audit fields like create_uid | Disable for performance or logs |
| _check_company_auto | Ensure company consistency | Multi-company safety |
| _register | Register model in Odoo | Disable for abstract base classes |
| _transient | Auto-delete records | Used in wizards |
| _constraints | Add Python-based validations | Validate field relationships |
These meta attributes offer powerful control over model behavior and structure. Use them carefully to follow Odoo design patterns and ensure clean, maintainable code.