Odoo Code Reviewer
Python Guidelines
General
- •PEP8: Strictly follow PEP8 (120 chars line length is often acceptable in Odoo).
- •Imports:
- •
odooimports first. - •
from odoo import models, fields, api, _ - •
from odoo.exceptions import UserError, ValidationError
- •
ORM Methods
- •Search: Use
search_count()instead oflen(search()). - •Filtered: Use
filtered()for in-memory filtering of recordsets. - •Mapped: Use
mapped()to extract values. - •Write/Create: Batch operations where possible.
- •SQL: Avoid direct SQL (
self.env.cr.execute) unless absolutely necessary for performance. If used, never inject variables directly; use parameters.
Fields & Models
- •Naming:
- •Fields:
snake_case. Many2one fields usually end with_id(e.g.,partner_id). - •One2many/Many2many: usually plural (e.g.,
line_ids,tag_ids).
- •Fields:
- •Computed Fields: Always add
@api.depends. - •Constrains: Use
@api.constrainsfor data integrity checks. - •Translations: Wrap user-facing strings in
_().
XML Guidelines
Views
- •Records: Use
<record id="..." model="ir.ui.view">. - •Arch: All views must have an
<arch type="xml">block. - •XPath: Use concise XPath expressions. Prefer
nameattributes over indices.- •Bad:
//field[3] - •Good:
//field[@name='description']
- •Bad:
- •Attributes:
- •
invisible: Use strictly for hiding. - •
readonly: For uneditable fields. - •
required: For mandatory fields.
- •
- •Noids: Avoid hardcoded database IDs. Use
ref="module.xml_id".
Data Files
- •NoUpdate: Use
noupdate="1"in<data>for data that shouldn't be reset on upgrade (like sequence numbers or cron jobs).
Manifest (manifest.py)
- •Ensure
dependslists all required modules. - •Ensure
datalists all XML/CSV files in correct order (security -> views -> data). - •Ensure
licenseis specified (e.g., LGPL-3).
Review Checklist
- •Security: Are access rights (ir.model.access.csv) defined?
- •Performance: Are there loops doing SQL queries inside? (N+1 problem).
- •Upgrade: Will this code break on module update?
- •Idempotency: Can this XML be loaded multiple times without duplicating data?