0) Prerequisits i objectiu
- Odoo instal·lat com a paquet (executable a
/usr/bin/odoo). - PostgreSQL actiu.
- Volem un entorn de desenvolupament separat al port 8070 per no tocar el servei del sistema (8069).
# Verificar executable i ruta d'addons oficials
which odoo
python3 -c "import odoo; print(','.join(odoo.conf.addons_paths))"
1) Carpeta de treball
mkdir -p ~/odoo-dev/{custom-addons,data,logs}
Aquí posarem els mòduls propis i els fitxers de dades/log del nostre Odoo de desenvolupament.
2) Configuració de desenvolupament (~/.odoorc.dev)
Crea el fitxer i posa-hi la configuració. Substitueix isard pel teu usuari si cal.
nano ~/.odoorc.dev
[options]
admin_passwd = admin
addons_path = /usr/lib/python3/dist-packages/odoo/addons,/home/isard/odoo-dev/custom-addons
db_host = False
db_port = False
db_user = isard
db_password = False
data_dir = /home/isard/odoo-dev/data
logfile = /home/isard/odoo-dev/logs/odoo.log
admin_passwd = clau de “Manage Databases”. No és el password de l’usuari
admin (aplicació) — aquest el fixarem després si cal.3) PostgreSQL: usuari i base de dades
# Crear rol (si no existeix) i BD per a dev
sudo -u postgres createuser -d isard
sudo -u postgres createdb -O isard dev_escola
Error que ens sortia: Peer authentication failed for user "odoo"
Solució: fer servir el teu usuari Unix (
Solució: fer servir el teu usuari Unix (
db_user = isard) i crear-li el rol com a dalt.4) Inicialitzar la BD (evitar el 500)
Una BD nova cal inicialitzar-la instal·lant base la primera vegada.
odoo -c ~/.odoorc.dev -d dev_escola -i base \
--http-port=8070 --without-demo=all --dev=all \
--log-level=debug --logfile=/dev/stdout
Ara http://localhost:8070 ja respon. Si veies 500 amb
KeyError: 'ir.http' o relation "ir_module_module" does not exist, repeteix aquest pas.5) Accés
Login d'usuari (aplicació)
- Usuari:
admin - Contrasenya: defineix-la si cal amb odoo shell:
odoo shell -c ~/.odoorc.dev -d dev_escola
admin = env['res.users'].search([('login','=','admin')], limit=1)
admin.write({'password': 'admin'})
exit()
Manage Databases
Clau: eladmin_passwd de ~/.odoorc.dev (en aquesta guia, admin).
6) Crear el primer mòdul (scaffold)
odoo scaffold hello ~/odoo-dev/custom-addons
Ara activa el Developer mode a Settings → Activate the developer mode, ves a Apps, treu el filtre “Apps”, i fes Update Apps List. Cerca “hello” i Install.
Si “no troba el mòdul”: comprova que
addons_path a ~/.odoorc.dev inclou ~/odoo-dev/custom-addons i repeteix “Update Apps List”.7) Mòdul mínim “Hola món” (100% funcional)
Si el scaffold no està disponible, crea un mòdul manualment: hello/ amb __manifest__.py, __init__.py, models/, views/, security/. A sota tens tot el necessari.
hello/__manifest__.py
{
"name": "Hello",
"version": "17.0.1.0.0",
"category": "Tools",
"summary": "Mòdul de prova",
"depends": ["base"],
"data": [
"views/hello_actions.xml",
"views/hello_menus.xml",
"views/hello_views.xml",
"security/ir.model.access.csv"
],
"installable": True,
"application": True
}
Solució a l’error clàssic
External ID not found: hello.action_items: els menus referencien accions que han d’existir abans. Per això al manifest carreguem primer _actions.xml i després _menus.xml.hello/models/hello_item.py
from odoo import models, fields
class HelloItem(models.Model):
_name = "hello.item"
_description = "Hello Item"
name = fields.Char(required=True)
note = fields.Text()
hello/__init__.py
from . import models
hello/models/__init__.py
from . import hello_item
hello/views/hello_views.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_hello_item_tree" model="ir.ui.view">
<field name="name">hello.item.tree</field>
<field name="model">hello.item</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="note"/>
</tree>
</field>
</record>
<record id="view_hello_item_form" model="ir.ui.view">
<field name="name">hello.item.form</field>
<field name="model">hello.item</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name"/>
<field name="note"/>
</group>
</sheet>
</form>
</field>
</record>
</odoo>
hello/views/hello_actions.xml
<odoo>
<record id="action_hello_items" model="ir.actions.act_window">
<field name="name">Hello Items</field>
<field name="res_model">hello.item</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
hello/views/hello_menus.xml
<odoo>
<menuitem id="menu_hello_root" name="Hello"/>
<menuitem id="menu_hello_items" name="Items"
parent="menu_hello_root" action="action_hello_items"/>
</odoo>
hello/security/ir.model.access.csv
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_hello_item,access.hello.item,model_hello_item,base.group_user,1,1,1,1
Instal·la/actualitza:
Apps → Update Apps List → Hello → Install o bé consola:
odoo -c ~/.odoorc.dev -d dev_escola -u hello --stop-after-init
odoo -c ~/.odoorc.dev -d dev_escola --http-port=8070 --dev=all
8) Problemes típics resolts
No veig “Update Apps List”
Activa Developer mode a Settings.
Activa Developer mode a Settings.
“No troba el mòdul”
Confirma
Confirma
addons_path amb la teva carpeta ~/odoo-dev/custom-addons i repeteix Update Apps List.External ID not found: ... action_*
Carrega primer
Carrega primer
_actions.xml i després _menus.xml al __manifest__.py. L’ID d’acció ha de coincidir exactament.Error 500 / KeyError: 'ir.http'
Inicialitza la BD amb
Inicialitza la BD amb
-i base (vegeu pas 4).Peer authentication failed
Usa
Usa
db_user = el teu usuari Unix (p. ex. isard) i crea el rol a PG.9) Resum ràpid (checklist)
- Crear
~/odoo-dev/{custom-addons,data,logs}. - Escriure
~/.odoorc.devambadmin_passwd,addons_path,db_user,data_dir,logfile. - PG:
createuser -d isardicreatedb -O isard dev_escola. - Inicialitzar BD:
odoo ... -i base --http-port=8070. - Developer mode → Update Apps List.
- Scaffold o mòdul manual → Install.
Què ve a la Pàg. 2 i 3?
- Pàg. 2: Mòdul escola amb entitats alumnes, mòduls, professors, menús i llistats.
- Pàg. 3: Ampliacions i correccions (p. ex. Many2one mostrant el nom del professor correctament, millores de vistes, accions, etc.).