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.