Introducción
El campo Booleano es uno de los tipos de campo más simples en Odoo, y también uno de los más utilizados. Cada vez que marcas una casilla en un pedido de venta, marcas a un cliente como activo, o señalas un producto como favorito, estás interactuando con un campo Booleano.
A pesar de su simplicidad, el campo Booleano tiene algunos comportamientos que vale la pena entender correctamente. Saber cuándo usarlo, cuándo no usarlo, y cómo configurarlo bien te ayudará a construir entornos Odoo más limpios y evitar algunos errores comunes que incluso los equipos experimentados cometen.
Esta guía cubre el campo Booleano desde todos los ángulos: qué almacena, cómo se comporta en el modelo de datos de Odoo y en la interfaz de usuario, cómo crearlo o personalizarlo usando Odoo Studio o Python, casos de uso empresarial reales, y consejos prácticos para aprovechar al máximo este tipo de campo.
¿Qué es el campo Booleano en Odoo?
En el ORM de Odoo, el campo Booleano almacena uno de dos valores: True o False. Se mapea directamente a una columna BOOLEAN en PostgreSQL. No hay ambigüedad aquí: el campo está marcado o desmarcado, habilitado o deshabilitado, sí o no.
Desde la perspectiva del usuario, un campo Booleano aparece como una casilla de verificación en las vistas de formulario. En las vistas de lista, normalmente se muestra como un icono de marca de verificación cuando el valor es Verdadero y nada cuando es Falso. En algunas configuraciones, aparece como un interruptor en lugar de una casilla de verificación tradicional, dependiendo del widget aplicado.
Aquí está cómo se ve la definición de un campo Booleano en un módulo de Python Odoo:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
needs_manual_review = fields.Boolean(
string='Necesita Revisión Manual',
default=False,
)
El parámetro string establece la etiqueta que se muestra en la interfaz. El parámetro default controla el valor inicial cuando se crean nuevos registros. Sin un valor por defecto, Odoo trata el campo como False automáticamente, pero se considera una buena práctica declararlo explícitamente.
En Odoo Studio, este mismo tipo de campo se llama simplemente Casilla de Verificación. Los campos creados a través de Studio reciben automáticamente un prefijo x_studio_. Cuando se crean a través de Python o la API XML-RPC, defines el nombre técnico tú mismo.
Cómo funciona el campo
Cuando añades un campo Booleano a un modelo de Odoo, el marco crea automáticamente la columna correspondiente en la base de datos PostgreSQL durante la instalación o actualización del módulo. No se necesita migración SQL manual.
Una cosa importante que hay que entender: en Odoo, un campo Booleano nunca contiene None o NULL. El ORM siempre devuelve ya sea True o False. Incluso si la columna de la base de datos no tiene valor, Odoo devolverá False cuando leas el campo. Esto es diferente de otros tipos de campo como Many2one o Char, donde un valor vacío regresa como False o None y tienes que comprobar ambos.
Atributos Clave del Campo
Aquí están las principales propiedades que puedes configurar en un campo Booleano en el marco de Odoo:
- default: Establece el valor cuando se crea un nuevo registro. Casi siempre se establece en
False, pero puede serTruepara escenarios de exclusión. - compute: Vincula un método de Python que calcula el valor dinámicamente. Útil para banderas derivadas basadas en el estado de otros campos.
- store: Cuando se usa con
compute, determina si el valor se guarda en la base de datos. Constore=True, los campos Booleanos calculados pueden ser utilizados en filtros de búsqueda e informes. - readonly: Impide que los usuarios cambien manualmente el valor del campo en la interfaz. Común para indicadores calculados que solo deben ser establecidos por el sistema.
- copy: Controla si el valor del campo se transfiere al duplicar un registro. Por defecto es
True. Para indicadores como "está aprobado", normalmente querráscopy=Falsepara que los registros duplicados comiencen limpios. - groups: Restringe la visibilidad y edición a grupos de usuarios específicos.
Cómo Aparece en las Vistas
En las vistas de formulario, un campo Booleano se representa como una casilla de verificación HTML estándar. En las vistas de lista, Odoo muestra un icono de verificación para True y nada para False por defecto. Esto hace que las vistas de lista sean fáciles de escanear visualmente.
Puedes cambiar cómo se representa un campo Booleano utilizando widgets de vista. El widget toggle lo muestra como un interruptor en lugar de una casilla de verificación, lo que funciona bien para configuraciones o preferencias. Para una visualización de solo lectura, el widget boolean_favorite representa el valor como un icono de estrella, que puedes ver en formularios de productos y contactos en Odoo estándar.
Uso de Campos Booleanos en Filtros de Dominio
Los campos Booleanos son muy convenientes de usar en dominios de Odoo, que son las expresiones de filtro utilizadas en vistas de búsqueda, acciones automatizadas y reglas de acceso. Un filtro para registros no marcados se ve así:
[('needs_manual_review', '=', True)]
Dado que solo hay dos valores posibles, también puedes usar la forma más simple sin el operador:
[('needs_manual_review', '=', False)]
Este comportamiento de filtrado sencillo es una razón por la cual los campos Booleanos se integran tan bien con las acciones automatizadas de Odoo, acciones programadas y acciones del servidor. Son fáciles de verificar y actuar sin condiciones complejas.
Interacción con el ORM de Odoo
Leer y escribir campos Booleanos en el desarrollo de Odoo es tan directo como se puede. Accedes al valor en el objeto de registro, lo comparas con True o False, y lo asignas directamente. El ORM se encarga de todo lo demás. No hay conversiones, ni casos extremos de serialización, y no hay sorpresas al pasar valores a través de la API XML-RPC, ya que True y False se mapean limpiamente a sus equivalentes booleanos en XML-RPC.
Casos de uso empresarial
Los campos Booleanos aparecen en todos los departamentos en una implementación típica de Odoo. Aquí hay cinco ejemplos prácticos de flujos de trabajo empresariales reales.
CRM: Seguimiento de si un Lead ha sido Calificado
Los equipos de ventas a menudo necesitan marcar qué leads han sido revisados por un representante senior y confirmados como oportunidades viables. Un campo Booleano llamado is_qualified en el modelo de lead de CRM proporciona a los equipos una forma fácil de filtrar su pipeline. Los leads no calificados pueden ser manejados por personal junior, mientras que los calificados reciben atención prioritaria. Esta simple casilla de verificación reemplaza la necesidad de una etapa dedicada o un campo de estado solo para este propósito.
Ventas: Marcando Pedidos que Necesitan Revisión Manual
En algunos negocios, ciertos pedidos de venta requieren aprobación adicional antes de ser confirmados, por ejemplo, pedidos por encima de una cierta cantidad o para nuevos clientes. Un campo Booleano needs_manual_review en el pedido de venta, combinado con una acción automatizada que lo establece en True según las reglas comerciales, proporciona al equipo de finanzas u operaciones una cola clara de trabajo. Pueden filtrar la lista de pedidos por este campo y procesar aprobaciones sin tener que revisar toda la lista de pedidos.
Inventario: Marcando Productos como Fuera de Catálogo
Cuando un producto ya no se vende pero aún necesita permanecer en el sistema para registros históricos, archivarlo no siempre es la opción correcta. Un campo Booleano is_discontinued en la plantilla del producto permite a los equipos de compras y ventas ver de un vistazo que el artículo no debe ser reordenado o cotizado a los clientes. Puedes usar este campo en filtros de listas de precios, reglas de validación de pedidos de compra y configuraciones de visibilidad en la tienda del sitio web.
Contabilidad: Identificando Facturas que Requieren Atención
Los equipos de finanzas a veces necesitan marcar facturas que han sido disputadas, contienen una discrepancia de precios, o están esperando un nota de crédito. En lugar de depender de notas de texto libre en el chat, un campo Booleano under_dispute proporciona al equipo una forma estructurada de filtrar e informar sobre estas facturas. Los recordatorios automáticos también pueden ser suprimidos para facturas con esta bandera establecida en True, evitando presión de pago innecesaria sobre un cliente mientras se resuelve un problema.
RRHH: Seguimiento de Certificaciones y Finalización de Capacitación
Los departamentos de recursos humanos a menudo necesitan confirmar que los empleados han completado la formación obligatoria o poseen una certificación requerida. Un campo booleano en el registro del empleado, como safety_training_completed, proporciona una forma sencilla y auditable de rastrear esto. Los gerentes pueden filtrar la lista de su equipo para ver quién aún necesita completar la formación, y los datos pueden integrarse en informes de cumplimiento sin necesidad de construir un módulo dedicado complejo.
Creando o personalizando el campo Booleano
Hay tres enfoques principales para agregar un campo booleano a un modelo de Odoo, dependiendo de tu configuración técnica y el nivel de personalización que necesites.
Usando Odoo Studio (Sin Código)
Odoo Studio es la herramienta de bajo código integrada para personalizar Odoo sin escribir ningún Python o XML. Para agregar un campo booleano a través de Studio:
- Abre Odoo Studio desde el menú principal (requiere la aplicación Studio).
- Navega hasta el formulario donde deseas agregar el campo.
- Arrastra un campo de Casilla de verificación desde la barra lateral al diseño del formulario.
- Establece la etiqueta, el valor predeterminado y cualquier restricción requerida o de solo lectura en el panel de propiedades del campo.
- Guarda y cierra Studio.
Studio maneja todo automáticamente: el campo se crea en la base de datos con un prefijo x_studio_ y se agrega a la vista. No se requiere reinicio ni actualización.
Usando Python en un Módulo Personalizado
Para los desarrolladores que construyen módulos de Odoo, los campos booleanos se definen directamente en los archivos de modelo de Python. Este es el enfoque recomendado para cualquier personalización que necesite ser controlada por versiones, probada y desplegada en múltiples entornos:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_is_key_account = fields.Boolean(
string='Key Account',
default=False,
copy=False,
)
Después de definir el campo, lo añades al archivo XML de la vista relevante para que aparezca en la interfaz. Odoo crea la columna de la base de datos cuando el módulo se instala o se actualiza.
Para los campos booleanos computados, el patrón se ve así:
from odoo import api, fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
is_high_value = fields.Boolean(
string='High Value Order',
compute='_compute_is_high_value',
store=True,
)
@api.depends('amount_total')
def _compute_is_high_value(self):
for order in self:
order.is_high_value = order.amount_total >= 10000
Con store=True, el valor computado se guarda en la base de datos, haciéndolo disponible en los filtros de búsqueda y en la agrupación de vistas de lista sin recalcular en cada carga de página.
Usando la API XML-RPC
Si gestionas las personalizaciones de Odoo programáticamente, por ejemplo, como parte de un pipeline de despliegue o un script de configuración remota, los campos booleanos se pueden crear a través de la API XML-RPC en el modelo ir.model.fields:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_needs_manual_review',
'field_description': 'Needs Manual Review',
'model_id': model_id,
'ttype': 'boolean',
'state': 'manual',
}]
)
El valor state: manual le indica a Odoo que este campo fue creado fuera de un módulo, que es la configuración correcta para los campos creados a través de Studio o la API. Así es exactamente como Dasolo maneja la creación remota de campos para clientes como parte de flujos de trabajo de configuración automatizados.
Mejores prácticas
1. Siempre define un valor por defecto
Aunque Odoo devuelve False para campos booleanos sin valor por defecto, es una buena práctica declarar default=False explícitamente en la definición de tu campo. Comunica la intención claramente a cualquiera que lea el código del modelo y previene ambigüedades cuando el campo se utiliza en acciones automatizadas o filtros.
2. Usa nombres descriptivos que se lean como preguntas
Los nombres de campos booleanos funcionan mejor cuando se leen de forma natural como una pregunta de sí/no. Nombres como is_verified, needs_approval, has_warranty o is_key_account son inmediatamente comprensibles. Evita nombres vagos como flag, status o check, que no dicen nada sobre lo que el campo realmente representa.
3. Establecer copy=False para las banderas de aprobación y estado
Si tu campo booleano representa un estado que no debe trasladarse cuando se duplica un registro, por ejemplo "está aprobado" o "ha sido enviado", siempre añade copy=False. De lo contrario, duplicar un registro copiará el valor de la bandera, lo que puede llevar a que los registros aparezcan como aprobados o enviados cuando no han pasado por el proceso adecuado.
4. Utiliza campos booleanos computados para estados derivados
Evita escribir acciones del servidor o código Python que actualicen manualmente un campo booleano en respuesta a cambios en otros campos. En su lugar, defínelo como un campo computado con @api.depends(). Esto mantiene tu lógica en un solo lugar, se ejecuta automáticamente en cada guardado y es mucho más fácil de mantener y depurar que las operaciones de escritura dispersas en múltiples lugares del código.
5. Añade campos booleanos a las vistas de búsqueda cuando se utilizan para filtrar
Si los usuarios necesitan filtrar registros regularmente basándose en un campo booleano, añádelo explícitamente a la vista de búsqueda. En Studio, habilita la opción de búsqueda en el panel de propiedades del campo. En código, añádelo al XML de la vista <search>. Esto proporciona a los usuarios un botón de filtro limpio en la barra de búsqueda en lugar de obligarlos a usar filtros avanzados cada vez.
Errores comunes
Usar booleanos para un estado que tiene más de dos opciones
Este es el error más común que cometen los equipos con los campos booleanos. Si un registro puede estar en uno de tres o más estados, como "pendiente", "aprobado" y "rechazado", un campo booleano es la herramienta incorrecta. Terminas añadiendo un segundo booleano, luego un tercero, y la lógica se vuelve imposible de gestionar. Usa un campo de selección o un flujo de trabajo de estado adecuado en su lugar. Los campos booleanos son para situaciones genuinamente binarias.
Olvidar establecer copy=False en las banderas de aprobación
Cuando los usuarios duplican registros en Odoo, todos los valores de los campos se copian por defecto. Un pedido que fue marcado como "aprobado" o "revisado" tendrá esas banderas configuradas en True en el duplicado inmediatamente. Si el registro duplicado debe comenzar desde cero, añade copy=False a cada bandera que represente una acción completada o un estado alcanzado.
No añadir el campo a la vista de búsqueda
Un campo booleano que los usuarios necesitan filtrar, pero que no está en la vista de búsqueda, les obliga a abrir el diálogo de filtro avanzado cada vez. Esto ralentiza significativamente los flujos de trabajo diarios. Si agregas un campo booleano que la gente usará para encontrar registros, da el paso adicional de añadirlo a la vista de búsqueda al mismo tiempo.
Usando un campo booleano en lugar del campo activo
Odoo tiene un campo active incorporado en la mayoría de los modelos que controla si los registros aparecen en las vistas estándar. Si tu campo booleano está destinado a ocultar o archivar registros, utiliza el campo nativo active y su mecanismo de alternancia en lugar de construir una solución de visibilidad personalizada. Esto mantiene tu modelo de datos alineado con el comportamiento estándar de Odoo y funciona bien con las acciones de archivar y desarchivar ya integradas en la interfaz de usuario.
Campos booleanos computados sin store=True en filtros
Si creas un campo booleano computado y tratas de usarlo en filtros de búsqueda o agrupación en vista de lista sin store=True, Odoo generará un error o ignorará silenciosamente el filtro. Los campos computados no almacenados existen solo en memoria y no pueden ser utilizados en consultas SQL. Si un booleano computado necesita ser filtrable o reportable, siempre añade store=True a la definición del campo.
Conclusión
El campo booleano es el tipo de campo que dejas de notar precisamente porque funciona tan bien. Está en todas partes en Odoo, desde la bandera active que controla la visibilidad de los registros, hasta el campo is_published que impulsa tu sitio web, hasta las docenas de banderas personalizadas que las empresas añaden a sus propios flujos de trabajo cada día.
Entender cómo se comporta en el modelo de datos de Odoo, cómo configurarlo correctamente con los valores y atributos adecuados, y cuándo usarlo frente a otros tipos de campos como Selección te ayudará a construir implementaciones que sean limpias, predecibles y fáciles de mantener.
Un campo booleano bien hecho es invisible para el usuario final. Simplemente funciona. Un campo booleano utilizado incorrectamente crea confusión, estados corruptos y una creciente pila de soluciones alternativas. La diferencia radica en conocer las reglas y aplicarlas de manera consistente.
En Dasolo, ayudamos a las empresas a implementar, personalizar y optimizar Odoo en todos los departamentos. Ya sea que necesites ayuda para diseñar un modelo de datos limpio, añadir campos personalizados a tus flujos de trabajo, o construir un módulo completo de Odoo desde cero, nuestro equipo está aquí para apoyarte. Contáctanos y hablemos sobre tu proyecto de Odoo.