How to Implement isinstance() in Odoo?


What is isinstance()?

isinstance(object, class_or_tuple) checks whether an object is an instance of a given class (or any subclass), or a tuple of classes.

  • Returns True if the object matches; otherwise False.
  • Preferred over type(obj) is SomeClass because it supports class inheritance.

✅ Syntax

isinstance(obj, Class)          # Single class

isinstance(obj, (Class1, Class2))  # Any of multiple classes


Basic Python Example

isinstance(5, int)           # ➝ True

isinstance("Odoo", (int, str))  # ➝ True

isinstance([], dict)         # ➝ False


🧠 Realistic Odoo Examples

1. Verify Model Type Before Processing


def process_record(record):

    if not isinstance(record, models.BaseModel):

        raise ValueError("Expected an Odoo record.")

    # Safe to access record methods/fields

2. Distinguish Between Recordsets and Single Records


from odoo import models


def ensure_single(recordset):

    if not isinstance(recordset, models.Model):

        raise ValueError("Invalid input")

    if len(recordset) != 1:

        raise ValueError("Expected exactly one record")


ensure_single(self.env['res.partner'].browse(1))


3. Handle Different Field Value Types


value = self.some_field

if isinstance(value, bool):

    # handle boolean

elif isinstance(value, (int, float)):

    # handle numeric

else:

    # handle other types



✅ Summary Table


Use Case

isinstance() Benefits

Model-type validation

Ensures robust method inputs

Multi-class checks

Pass tuple for OR-type validation

Supports inheritance

True for subclasses and base classes


Use isinstance() to write safer, inheritance-aware code in your Odoo modules.