es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo eliminar una clase de modelo de Odoo sin eliminar todo el módulo completo?

Tengo un módulo con una clase de modelo que me gustaría eliminar porque ya no es necesaria, pero otros modelos en el módulo siguen siendo importantes. Puedo eliminar todos los demás archivos que hacen referencia al modelo innecesario sin ningún error (seguridad CSV, vistas, archivos de datos, etc…), pero cuando finalmente elimino la referencia al archivo real que contiene la clase en sí (comento from . import model_name en models/__init__.py), obtengo el siguiente error:


odoo-server | Traza de error más reciente: odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/modules/registry.py", línea 60, en nuevo odoo-server | return cls.registros[nombre_bd] odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/tools/func.py", línea 69, en envoltura odoo-server | return func(self, *args, **kwargs) odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/tools/lru.py", línea 44, en obtener odoo-server | a = self.d[obj].yo odoo-server | KeyError: 'nombre_de_bd' odoo-server | Durante el manejo de la excepción anterior, se produjo otra excepción: odoo-server | Traza de error más reciente: odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/modules/registry.py", línea 86, en nuevo odoo-server | odoo.modules.load_modulos(registro.bd, forzar_demo, estado, actualizar_modulo) odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/modules/loading.py", línea 477, en cargar_modulos odoo-server | env['ir.model.data'].procesar_fin(modulos_procesados) odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", línea 2040, en procesar_fin odoo-server | registro.borrar() odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", línea 1217, en borrar odoo-server | if not self.env[seleccion.field_id.modelo].abstract: odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/api.py", línea 466, en obteneritem odoo-server | return self.registry[nombre_de_modelo].navegar(self, (), ()) odoo-server | Archivo "/usr/lib/python3/dist-packages/odoo/modules/registry.py", línea 176, en obteneritem odoo-server | return self.modelos[nombre_de_modelo] odoo-server | KeyError: 'nombre_de_modelo'

¿Por qué no puedo simplemente eliminar la referencia al archivo que contiene la clase? ¿Cómo puedo eliminar un modelo sin desinstalar el módulo completo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Cuando eliminas la referencia al archivo que contiene la clase en models/__init__.py, Odoo seguirá intentando cargar el modelo durante el proceso de inicio. Dado que el archivo ya no está presente, Odoo generará un error y no podrá iniciar. Es por eso que verás el KeyError en el registro.

    Para eliminar un modelo sin desinstalar todo el módulo, debes seguir los siguientes pasos:

    1. Eliminar todas las referencias al modelo en vistas, archivos de datos, archivo CSV de seguridad y otros archivos relevantes.
    2. Comentar la clase del modelo en models/model_name.py.
    3. Reiniciar el servidor de Odoo.
    4. Desvincular todos los registros relacionados con el modelo (registros ir.model, registros ir.model.fields, etc.). Esto se puede hacer utilizando la API de Modelos de Odoo o ejecutando una consulta SQL directamente en la base de datos.
    5. Eliminar la clase del modelo de models/__init__.py.

    Una vez que hayas completado estos pasos, deberías poder eliminar el modelo de tu módulo de forma segura sin causar ningún error.

Comments are closed.