Workflow Manage life of records Based on state field (cost nothing) _transition_state = 'state' Declare permit transitions from state to state cls._transitions |= { ('draft', 'quotation'), ('quotation', 'confirmed'), ...} Method decorator to run transition (ignore not permitted) @classmethod @Workflow.transition('quotation') def quote(cls, sales): pass