Odoo 17 — Crear el primer mòdul (entorn dev al port 8070)

Guia pas a pas: preparar ~/odoo-dev, configurar l’entorn separat, inicialitzar la BD, i crear + instal·lar un mòdul “Hola món”. Inclou solucions als errors que ens van aparèixer (Developer mode, Update Apps List, External ID not found, etc.).

0) Prerequisits i objectiu

# 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 (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: el admin_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.
“No troba el mòdul”
Confirma addons_path amb la teva carpeta ~/odoo-dev/custom-addons i repeteix Update Apps List.
External ID not found: ... action_*
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 -i base (vegeu pas 4).
Peer authentication failed
Usa db_user = el teu usuari Unix (p. ex. isard) i crea el rol a PG.

9) Resum ràpid (checklist)

  1. Crear ~/odoo-dev/{custom-addons,data,logs}.
  2. Escriure ~/.odoorc.dev amb admin_passwd, addons_path, db_user, data_dir, logfile.
  3. PG: createuser -d isard i createdb -O isard dev_escola.
  4. Inicialitzar BD: odoo ... -i base --http-port=8070.
  5. Developer mode → Update Apps List.
  6. Scaffold o mòdul manual → Install.

Què ve a la Pàg. 2 i 3?