How to Implement store=True and compute store=False  in Odoo?

Overview

In Odoo, computed fields are defined using the compute parameter. The store attribute controls whether the computed value is persisted in the database or calculated dynamically on the fly.

✅ Syntax

computed_field = fields.Char(

  compute=’_compute_method’,

  store=True or False

)

🔍 store=False (Default)
  • Value is not stored in the database
  • Computation happens each time the field is accessed
  • Cannot be used in:
    • search domains
    • group_by
    • filters in views

📌 Example

total = fields.Float(

    compute=‘_compute_total’

    store=False

)

@api.depends(‘amount’, ‘tax’)

def _compute_total(self):

    for rec in self:

        rec.total = rec.amount + rec.tax

Field total will be computed every time it’s accessed.

🔍 store=True
  • Value is stored in the database
  • Computation happens:
    • when the record is created or updated
    • when any @api.depends field changes
  • Can be used in:
    • search domains
    • filters
    • group_by in views
    • performance-optimized reports

📌 Example

total = fields.Float(

    compute=‘_compute_total’

    store=True

)


@api.depends(‘amount’, ‘tax’)

def _compute_total(self):

    for rec in self:

        rec.total = rec.amount + rec.tax

Field total is stored, searchable, and usable in filters.

🧠 Realistic Use Case in Odoo

store=False: Use for UI-only or temporary calculations

age_category = fields.Selection(

    compute=‘_compute_age_category’,

    store=False

)


def _compute_age_category(self):

    for rec in self:

        rec.age_category = ‘adult’ if rec.age > 18 else ‘minor’

Used only for display—no need to store.

store=True: Use for reporting, performance, filtering

invoice_count = fields.Integer(

 compute=‘_compute_invoice_count’,

    store=True

)

 

@api.depends(‘invoice_ids’)

def _compute_invoice_count(self):

    for rec in self:

        rec.invoice_count = len(rec.invoice_ids)

Searchable, fast access, available in smart buttons.

✅ Summary Table

Feature
store=False
store=True
Stored in DB ❌ No ✅ Yes
Recomputed Every access On trigger (@api.depends)
Searchable / Filter ❌ No ✅ Yes
Use in group_by ❌ No ✅ Yes
Recommended for UI display, light data Reporting, filters, performance