OdooWiki OCA HUB
Sin categoría Licencia: LGPL-3

Este addon proporciona un nuevo tipo de campo llamado "Vector" que te permite almacenar y gestionar vectores en tu base de datos de Odoo.

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 19.0

Añade un nuevo tipo de campo "Vector" que permite almacenar listas de números (vectores) directamente en los registros de Odoo, por ejemplo para embeddings o perfiles numéricos.

Este módulo es un bloque de construcción técnico: no añade ningún menú ni pantalla por sí mismo. Extiende la lista de tipos de campo disponibles en los ajustes técnicos de Odoo, de modo que cuando un desarrollador crea un campo personalizado puede elegir "Vector" como tipo de campo.

  • Un campo vector tiene un tamaño fijo (número de valores) definido cuando se crea el campo; el tamaño debe ser un número entero positivo.
  • Los valores pueden introducirse como una lista de números; si la lista es más corta que el tamaño del campo, se completa automáticamente con ceros (a menos que el relleno automático esté desactivado).
  • Si la lista es más larga que el tamaño del campo, Odoo se niega a guardarla y muestra un error.
  • El módulo comprueba la columna de la base de datos y, si el tamaño del vector almacenado ya no coincide con la definición del campo, convierte la columna al nuevo tamaño.
  • Se apoya en la extensión vector de PostgreSQL y en la librería numpy de Python; durante la instalación intenta habilitar la extensión de la base de datos automáticamente y muestra un mensaje de error claro si eso no es posible.

Toca el modelo ir.model.fields (el modelo técnico que describe los campos) y el almacenamiento subyacente de la base de datos. No se añaden documentos de negocio, informes, correos electrónicos ni acciones programadas.

Depende de

base
Modelos y campos (1)
  • ir.model.fields · amplía un modelo existentettype

Texto generado por IA (DeepSeek) al leer el código de la versión 19.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 16.0

Confirmado el 2026-11-03 en la rama 16.0 de OCA/server-tools.

terminal Instalación y uso

Documentación de OCA · Odoo 19.0

Para instalar este módulo, debe asegurarse de que la extensión pgvector esté instalada y disponible en su instancia de PostgreSQL.

> ⚠️ Advertencia > Este addon no es compatible con la librería pgvector de Python. Asegúrese de no utilizar esta librería junto con el addon para evitar posibles problemas. Esto se debe principalmente a que los arrays de numpy no se pueden almacenar en la caché de odoo, ya que no son comparables con los operadores '==' o '!=' predeterminados.

El módulo es un módulo técnico que proporciona un nuevo tipo de campo llamado "Vector". Está pensado para ser utilizado por desarrolladores que quieran almacenar y gestionar datos vectoriales en su base de datos de Odoo cuando desarrollen sus propios módulos.

Declaración del campo

Para declarar un campo de tipo vector, puede utilizar la siguiente sintaxis:

from odoo.addons.field_vector.fields import Vector


class YourModel(models.Model):
    _name = 'your.model'

    vector_field = Vector(dimensions=3)

El parámetro dimensions es obligatorio y especifica el número de dimensiones del vector. El campo se almacenará como un tipo vector en PostgreSQL, que es un tipo nativo para almacenar vectores.

Por defecto, el campo se declara sin prefetch=False y con autopad=True. Puede sobrescribir estos parámetros pasándolos como argumentos al campo:

from odoo.addons.field_vector.fields import Vector
class YourModel(models.Model):
    _name = 'your.model'

    vector_field = Vector(dimensions=3, prefetch=True, autopad=False)

El parámetro prefetch permite habilitar o deshabilitar la precarga del campo al cargar registros. Si se establece en True, el campo se precargará al cargar registros, lo que puede mejorar el rendimiento cuando se accede al campo con frecuencia. Si se establece en False, el campo no se precargará, lo que puede ahorrar memoria y mejorar el rendimiento cuando se accede al campo con poca frecuencia (que sería el caso habitual).

El parámetro autopad permite habilitar o deshabilitar el relleno automático del vector al almacenarlo en la base de datos. Si se establece en True, el vector se rellenará automáticamente con ceros para que coincida con las dimensiones especificadas. Si se establece en False, el vector no se rellenará, pero si el vector es más corto que las dimensiones especificadas se generará un error.

Uso del campo

El campo vector se puede utilizar como cualquier otro campo en Odoo. Al acceder al campo, siempre devolverá un objeto odoo.addons.field_vector.fields.VectorValue, que es un envoltorio alrededor del valor almacenado en la base de datos. Este objeto proporciona una forma cómoda de obtener el valor del vector como un array de numpy.

import numpy as np
from odoo.addons.field_vector.fields import  VectorValue

record = self.env['your.model'].create({
    'vector_field': [1.0, 2.0, 3.0]
})

assert isinstance(record.vector_field, VectorValue)
assert isinstance(record.vector_field.value, np.ndarray)

Al establecer el campo, puede pasar una lista de valores o un array de numpy o un objeto VectorValue o una lista/tupla de valores. El campo convertirá automáticamente el valor a un VectorValue y lo almacenará en la base de datos en el formato vector.

record.vector_field = [1.0, 2.0, 3.0]
assert isinstance(record.vector_field, VectorValue)

record.vector_field = np.array([1.0, 2.0, 3.0])
assert isinstance(record.vector_field, VectorValue)

record.vector_field = VectorValue([1.0, 2.0, 3.0])
assert isinstance(record.vector_field, VectorValue)

Consultas SQL simples

Al leer el campo en consultas SQL simples, el campo se devolverá como un objeto VectorValue. Puede utilizar la propiedad value para obtener el valor del vector como un array de numpy.

env.cr.execute('SELECT vector_field FROM your_model WHERE id = 1')
record = env.cr.fetchone()
vector_value = record[0]
assert isinstance(vector_value, VectorValue)

Al escribir el campo en consultas SQL simples, puede pasar un array de numpy o una lista de valores o un objeto VectorValue como valor del campo (en este caso concreto no se admiten tuplas).

env.cr.execute('UPDATE your_model SET vector_field = %s WHERE id = 1', (np.array([1.0, 2.0, 3.0]),))
env.cr.execute('UPDATE your_model SET vector_field = %s WHERE id = 1', ([1.0, 2.0, 3.0],))
env.cr.execute('UPDATE your_model SET vector_field = %s WHERE id = 1', (VectorValue([1.0, 2.0, 3.0]),))

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