Este módulo aprovecha los conceptos introducidos en el módulo datamodel para ofrecer mecanismos similares a (un subconjunto de) ModelSerializer en Django REST Framework. Es decir, utilizar la definición del modelo de Odoo para automatizar parcialmente la definición de una clase Datamodel correspondiente.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 15.0Este módulo permite a los desarrolladores convertir automáticamente los modelos de Odoo en estructuras de datos serializables, lo que facilita el envío y la recepción de datos a través de APIs o integraciones.
Este módulo es una herramienta técnica para desarrolladores. Crea automáticamente serializadores de datos a partir de modelos de Odoo, de modo que los registros se pueden convertir hacia y desde formatos de datos simples (como JSON) sin escribir a mano todo el código de conversión.
- Funciona con el módulo
datamodely utiliza la libreríamarshmallow. - Cuando un desarrollador define una clase serializadora, el módulo lee la definición del modelo de Odoo y genera los campos correspondientes automáticamente.
- Admite tipos de campo comunes como texto, números, fechas, booleanos, datos binarios y relaciones (many2one, one2many, many2many).
- Proporciona métodos para convertir un conjunto de registros de Odoo en objetos serializados (
from_recordset) y para convertir objetos serializados de nuevo en registros de Odoo (to_recordset). - Incluye un serializador mínimo (
generic.minimal.serializer) que solo expone el ID del registro y el nombre para mostrar, útil para referencias simples. - Añade validación para asegurar que existan los serializadores anidados y que los atributos requeridos estén definidos.
- Extiende el
datamodel.builderpara cargar y construir estos serializadores cuando se carga el módulo.
No hay menús ni elementos de interfaz de usuario; este módulo se utiliza mediante programación por otros módulos o código personalizado. Toca el modelo base e introduce nuevos modelos abstractos para la serialización.
Depende de
Modelos y campos (4)
- base · amplía un modelo existente
- datamodel.builder · amplía un modelo existente
- generic.minimal.serializer · modelo nuevoid, display_name
- generic.abstract.serializer · modelo nuevo
Texto generado por IA (DeepSeek) al leer el código de la versión 15.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 3 confirmadas, 6 sin información de 9 versiones.
Fuentes · Odoo 15.0
Confirmado el 2026-11-03 en la rama 15.0 de OCA/rest-framework.
terminal Instalación y uso
Documentación de OCA · Odoo 15.0Clase ModelSerializer
The :code:`ModelSerializer` class inherits from the :code:`Datamodel` class and adds functionalities. Therefore any
class inheriting from :code:`ModelSerializer` can be used the exact same way as any other :code:`Datamodel`.
Basic usage
***********
Here is a basic example::
from odoo.addons.model_serializer.core import ModelSerializer
class PartnerInfo(ModelSerializer):
_name = "partner.info"
_model = "res.partner"
_model_fields = ["id", "name", "country_id"]
The result is equivalent to the following :code:`Datamodel` classes::
from marshmallow import fields
from odoo.addons.datamodel.core import Datamodel
from odoo.addons.datamodel.fields import NestedModel
class PartnerInfo(Datamodel):
_name = "partner.info"
id = fields.Integer(required=True, allow_none=False, dump_only=True)
name = fields.String(required=True, allow_none=False)
country = NestedModel("_auto_nested_serializer.res.country")
class _AutoNestedSerializerResCountry(Datamodel):
_name = "_auto_nested_serializer.res.country"
id = fields.Integer(required=True, allow_none=False, dump_only=True)
display_name = fields.String(dump_only=True)
Overriding fields definition
****************************
It is possible to override the default definition of fields as such::
from odoo.addons.model_serializer.core import ModelSerializer
class PartnerInfo(ModelSerializer):
_name = "partner.info"
_model = "res.partner"
_model_fields = ["id", "name", "country_id"]
country_id = NestedModel("country.info")
class CountryInfo(ModelSerializer):
_name = "country.info"
_model = "res.country"
_model_fields = ["code", "name"]
In this example, we override a :code:`NestedModel` but it works the same for any other field type.
(De)serialization
*****************
:code:`ModelSerializer` does all the heavy-lifting of transforming a :code:`Datamodel` instance into the corresponding
:code:`recordset`, and vice-versa.
To transform a recordset into a (list of) :code:`ModelSerializer` instance(s) (serialization), do the following::
partner_info = self.env.datamodels["partner.info"].from_recordset(partner)
This will return a single instance; if your recordset contains more than one record, you can get a list of instances
by passing :code:`many=True` to this method.
To transform a :code:`ModelSerializer` instance into a recordset (de-serialization), do the following::
partner = partner_info.to_recordset()
Unless an existing partner can be found (see below), this method **creates a new record** in the database. You can avoid
that by passing :code:`create=False`, in which case the system will only create them in memory (:code:`NewId` recordset).
In order to determine if the corresponding Odoo record already exists or if a new one should be created, the system
checks by default if the :code:`id` field of the instance corresponds to a database record. This default behavior can be
modified like so::
class CountryInfo(ModelSerializer):
_name = "country.info"
_model = "res.country"
_model_fields = ["code", "name"]
def get_odoo_record(self):
if self.code:
return self.env[self._model].search([("code", "=", self.code)])
return super().get_odoo_record()Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación, Configuración.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.