OdooWiki OCA HUB

Model Serializer

model_serializer folder_open OCA/rest-framework open_in_new
Sin categoría Licencia: LGPL-3

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.0

Este 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 datamodel y utiliza la librería marshmallow.
  • 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.builder para 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-03
Confirmado (verificado en repositorio y rama) Estimado (sin verificar) Sin información

Estado 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.0

Clase 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.

info

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.