- iterable: A list, tuple, or Odoo recordset.
- start: Optional index to start counting from (default is 0).
📌 Realistic Use Cases in Odoo
1. Numbering Items in a List (e.g., in Report or Email Body)
Suppose you’re preparing a message with numbered order lines:
body = “Order Lines:\n”
for idx, line in enumerate(self.order_line, start=1):
body += f“{idx}. {line.product_id.name} – Qty: {line.product_uom_qty}\n”
self.message_post(body=body)
This creates a structured, user-friendly message with line numbers.
When exporting product lines to Excel:​
row = 2
for idx, line in enumerate(order.order_line, start=1):
sheet.write(row, 0, idx) # Serial number
sheet.write(row, 1, line.product_id.name)
sheet.write(row, 2, line.product_uom_qty)
row += 1​
You provide a clear, indexed list in the export file.
Sometimes you need to treat the first item differently:
for idx, partner in enumerate(partners):
    if idx == 0:
        _logger.info(“Primary partner: %s”, partner.name)
    else:
        _logger.info(“Secondary partner: %s”, partner.name)
✅ Summary Table
| Function | Purpose | Example Use Case |
| enumerate() | Loop with index and value | Numbering order lines, Excel serials |
| start parameter | Set custom starting index | Start from 1 instead of 0 |