Introdução
Se alguma vez salvou um formulário no Odoo e viu um campo ficar vermelho, já encontrou o mecanismo de campo obrigatório. É uma das características mais fundamentais no modelo de dados do Odoo e uma das formas mais simples de garantir a qualidade dos dados em seus fluxos de trabalho empresariais.
Quer esteja a configurar o Odoo para uma equipa de vendas, a configurar um modelo personalizado ou a trabalhar num projeto de desenvolvimento técnico do Odoo, compreender como o atributo required funciona ajudará a construir processos mais fiáveis.
Este guia cobre tudo: como o campo se comporta no framework do Odoo, como configurá-lo usando o Odoo Studio ou código Python, quando usá-lo e quais erros evitar.
O que é o Campo Obrigatório no Odoo
No Odoo, o atributo required é uma restrição a nível de campo que impede que um registo seja salvo a menos que o campo contenha um valor. Aplica-se a praticamente todos os tipos de campo do Odoo: campos de texto, campos numéricos, campos de seleção, campos many2one, datas e mais.
Faz parte do modelo de dados central do Odoo e é um dos atributos mais utilizados ao fazer personalizações no Odoo. Definir um campo como obrigatório é a primeira linha de defesa contra dados incompletos ou inconsistentes na sua base de dados.
Como Aparece na Interface
Na interface do Odoo, os campos obrigatórios são visualmente distintos dos opcionais. Quando um formulário está em modo de edição, os campos obrigatórios normalmente exibem um indicador visual sutil. Quando um utilizador tenta salvar o registo sem preencher um campo obrigatório, o Odoo destaca o campo em vermelho e exibe uma mensagem de aviso.
Este comportamento é consistente em toda a interface web. Os utilizadores recebem um feedback imediato e claro, o que reduz a probabilidade de submeter registos incompletos.
Obrigatório Estático vs. Dinâmico
Existem duas maneiras de tornar um campo obrigatório no Odoo. A primeira é um obrigatório estático: o campo é sempre obrigatório, não importa o quê. A segunda é um obrigatório dinâmico: o campo torna-se obrigatório apenas quando certas condições são atendidas, com base nos valores de outros campos no mesmo registo.
Ambas as abordagens são utilizadas regularmente no desenvolvimento do Odoo. A escolha depende da sua lógica de negócios.
Como o Campo Funciona
Compreender como o atributo required funciona a nível técnico ajuda a aplicá-lo corretamente e a depurar problemas quando surgem.
Aplicação de Regras a Nível de Aplicação
Um detalhe importante que surpreende muitos utilizadores do Odoo: o atributo required é aplicado a nível de aplicação, não a nível de base de dados. Isso significa que a restrição é verificada pelo ORM do Odoo quando um registo é criado ou escrito, antes de os dados chegarem à base de dados.
Não há uma restrição NOT NULL adicionada à coluna subjacente do PostgreSQL por padrão quando você define required=True em um campo. A validação ocorre em Python, dentro da camada ORM do Odoo.
Na prática, isso significa que dados inseridos diretamente no banco de dados (contornando o Odoo) não serão capturados pela restrição obrigatória. Sempre interaja com os campos do banco de dados Odoo através do ORM ou da API para se beneficiar dessa proteção.
O Que Acontece Quando a Restrição É Violada
Quando um usuário tenta salvar um formulário com um campo obrigatório deixado em branco, duas coisas acontecem:
- O campo fica vermelho na interface, e o Odoo exibe uma mensagem de validação
- A operação de salvamento é bloqueada até que o campo seja preenchido
Se você acionar a validação programaticamente (por exemplo, via API XML-RPC ou uma ação de servidor), o Odoo levanta um ValidationError com uma mensagem indicando qual campo obrigatório está faltando.
Obrigatório Dinâmico Usando Domínios
No framework Odoo, o atributo required pode ser tornado condicional usando expressões em nível de visualização. No Odoo 16 e versões anteriores, isso é feito com o atributo attrs no XML da visualização:
<field name="x_delivery_date" attrs="{'required': [('order_type', '=', 'delivery')]}" />
No Odoo 17 e versões posteriores, a sintaxe é simplificada com uma expressão required direta na tag do campo na visualização:
<field name="x_delivery_date" required="order_type == 'delivery'" />
Essas regras condicionais vivem na camada de visualização, não na camada de modelo. Esta é uma distinção importante: o required=True em nível de modelo sempre impõe a restrição, enquanto as expressões em nível de visualização se aplicam apenas em contextos específicos da interface.
Interação com o ORM e API
No ORM do Odoo, quando você chama create() ou write() em um modelo, o ORM verifica todos os campos com required=True antes de executar a operação no banco de dados. Se um campo obrigatório estiver ausente ou definido como False, o Odoo gera um ValidationError.
Isso também se aplica ao criar registros via API XML-RPC. Qualquer campo marcado como obrigatório na definição do modelo deve ser fornecido no dicionário de dados passado para o método create, ou a chamada falhará com um erro.
Casos de Uso Empresarial
Campos obrigatórios aparecem em todo o Odoo padrão, e são igualmente úteis em configurações personalizadas. Aqui estão cinco exemplos concretos de fluxos de trabalho empresariais reais onde tornar um campo obrigatório faz uma diferença genuína.
1. CRM: Segmento de Cliente Obrigatório em Leads
Uma equipe de vendas quer garantir que cada lead seja atribuído a um segmento de cliente antes de ser movido para o pipeline. Sem um campo obrigatório, os representantes de vendas muitas vezes pulam essa etapa, tornando impossível relatar as fontes de leads por segmento mais tarde.
Ao marcar um campo de seleção "Segmento de Cliente" personalizado como obrigatório no formulário de lead do CRM, a equipe garante que os dados sejam sempre capturados no ponto de entrada. Sem segmento, sem salvar.
2. Vendas: Endereço de Entrega Obrigatório em Pedidos
Para empresas que enviam bens físicos, o endereço de entrega é crítico. Em algumas configurações do Odoo, o campo de endereço de entrega não é obrigatório por padrão, o que significa que os pedidos podem ser confirmados sem um.
Tornar o campo de endereço de entrega obrigatório no formulário de pedido de vendas impede que o pedido seja confirmado antes que a equipe de logística tenha as informações de que precisa. Isso elimina uma fonte comum de erros no processo de cumprimento.
3. Inventário: Lote ou Número de Série Obrigatório na Recepção
Para empresas que operam em indústrias regulamentadas (alimentos, farmacêuticos, eletrônicos), rastrear números de lote em bens recebidos não é opcional. O Odoo suporta isso nativamente através da configuração de rastreamento em produtos, que efetivamente impõe um número de lote ou de série obrigatório durante os movimentos de estoque.
Para campos personalizados em formulários de recibo, como uma referência de controle de qualidade, tornar o campo obrigatório garante que a equipe do armazém nunca se esqueça de registrar as informações durante o processo de recepção.
4. Contabilidade: Centro de Custo Obrigatório em Faturas de Fornecedores
As equipes financeiras frequentemente precisam que cada despesa seja atribuída a um centro de custo para rastreamento orçamentário. Sem a imposição, contadores ou gerentes de compras podem deixar o campo em branco, criando lacunas nos relatórios financeiros.
Um campo many2one obrigatório apontando para o modelo de centro de custo, adicionado ao formulário da fatura do fornecedor, garante que nenhuma fatura possa ser registrada sem essa atribuição. Esse tipo de personalização do Odoo é rápido de implementar e tem um impacto direto na completude dos dados.
5. RH: Tipo de Contrato Obrigatório Antes da Integração
As equipes de RH que gerenciam a integração de funcionários no Odoo frequentemente desejam garantir que o tipo de contrato seja registrado antes que o registro do funcionário seja finalizado. Um campo obrigatório no formulário do funcionário impede que a equipe de RH salve inadvertidamente um registro de funcionário incompleto durante um período de integração movimentado.
Criando ou Personalizando o Campo
Existem duas maneiras principais de marcar um campo como obrigatório no Odoo: usando o Odoo Studio para uma abordagem sem código ou escrevendo código Python para controle total. Ambas são válidas dependendo do seu contexto.
Usando o Odoo Studio
O Odoo Studio é a ferramenta integrada sem código que permite configurar campos sem qualquer desenvolvimento. Quando você abre o Studio e seleciona um campo em um formulário, verá um botão "Obrigatório" no painel de propriedades do campo à direita.
Ativar este botão marca o campo como obrigatório na visualização e armazena a restrição no nível do modelo. Esta é a abordagem mais rápida para casos simples e não requer conhecimento técnico. Funciona bem tanto para campos padrão do Odoo quanto para campos personalizados adicionados através do Odoo Studio.
A limitação do Studio é que ele apenas configura uma restrição obrigatória estática. Para um comportamento obrigatório dinâmico baseado em outros valores de campo, você precisa editar o XML da visualização diretamente ou usar a abordagem técnica.
Abordagem Técnica: Campos Python
Em um módulo Odoo personalizado, declarar um campo obrigatório é tão simples quanto adicionar required=True à definição do campo. Este é o padrão padrão no desenvolvimento de campos python do odoo:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
x_customer_segment = fields.Selection(
selection=[
('smb', 'SMB'),
('enterprise', 'Enterprise'),
('public', 'Public Sector'),
],
string='Customer Segment',
required=True,
)
x_cost_center_id = fields.Many2one(
comodel_name='account.analytic.account',
string='Cost Center',
required=True,
)
Com essa abordagem, a restrição é aplicada no nível do modelo, o que significa que se aplica independentemente de qual visualização ou interface é usada para criar o registro. Não pode ser contornada acessando o registro através de uma visualização diferente.
Requerido Dinâmico em XML de Visualização
Quando a restrição obrigatória deve se aplicar apenas sob certas condições, adicione-a no nível da visualização em vez do nível do modelo. No Odoo 16:
<field name="x_cost_center_id"
attrs="{'required': [('order_type', '=', 'invoiced')]}" />
No Odoo 17:
<field name="x_cost_center_id"
required="order_type == 'invoiced'" />
Esta é uma restrição apenas de visualização. É menos rigorosa do que uma obrigatoriedade no nível do modelo, uma vez que se aplica apenas quando o registro é editado através da visualização específica que contém esta definição.
Criando Campos Obrigatórios via API
Se você usar a API XML-RPC para criar campos (como abordado em outros artigos na coleção Odoo Data & API), você pode definir required ao chamar create em ir.model.fields. Isso faz parte do guia padrão do desenvolvedor odoo para personalização programática:
models.execute_kw(ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_customer_segment',
'field_description': 'Customer Segment',
'model_id': model_id,
'ttype': 'selection',
'selection': "[('smb', 'SMB'), ('enterprise', 'Enterprise')]",
'required': True,
'state': 'manual',
}]
)
Isto cria o campo e impõe a restrição necessária em um único passo, o que é útil em fluxos de trabalho de implantação automatizada para cenários de criação de campos do odoo.
Melhores Práticas
Marcar um campo como obrigatório parece simples, mas usá-lo bem requer algum pensamento. Aqui estão as práticas que economizarão seu tempo e evitarão frustrações para seus usuários.
1. Torne os Campos Obrigatórios Apenas Quando Realmente Forem
Exigir campos em excesso é um dos erros de configuração mais comuns no Odoo. Se um usuário não consegue completar um formulário porque um campo é obrigatório, mas a informação ainda não está disponível, ele encontrará soluções alternativas (como inserir valores de espaço reservado) que corrompem seus dados.
Antes de marcar um campo como obrigatório, pergunte: essa informação está sempre disponível no momento da entrada? Se a resposta não for um claro sim, considere torná-la obrigatória em uma fase posterior (por exemplo, na confirmação em vez de na criação) ou use uma exigência dinâmica em vez disso.
2. Use Validação Baseada em Estágios em vez de Sempre Obrigatório
Para fluxos de trabalho com várias etapas, como uma oportunidade de CRM ou uma ordem de fabricação, muitas vezes é melhor impor campos obrigatórios em estágios específicos em vez de desde o início. Isso é tipicamente feito através de restrições em Python ou ações automatizadas que verificam os valores dos campos quando o registro avança para um determinado estágio.
Esse padrão é mais flexível e amigável ao usuário do que tornar todos os campos obrigatórios desde o primeiro dia.
3. Combine Campos Obrigatórios com Valores Padrão Onde For Sensato
Se um campo é obrigatório e tem um valor padrão sensato para a maioria dos casos, defina um default na definição do campo. Isso reduz a fricção para usuários que não precisam alterar o padrão, enquanto ainda garante que o campo nunca esteja vazio.
4. Prefira Obrigatoriedade em Nível de Modelo para Dados Críticos
Para dados que são realmente críticos (como informações contábeis, identificadores regulatórios ou identificadores obrigatórios), imponha a restrição em nível de modelo em Python em vez de apenas em nível de visualização. Restrições obrigatórias em nível de visualização podem ser contornadas se um registro for criado através da API ou de uma visualização diferente que não inclua a restrição.
5. Comunique os Campos Obrigatórios aos Utilizadores Finais
Quando adiciona novos campos obrigatórios a formulários existentes, os utilizadores que estão em meio a um fluxo de trabalho podem ficar surpreendidos. Comunique as alterações à sua equipa antes de implementar, especialmente se os registos existentes puderem falhar na validação na próxima edição.
6. Teste com Dados Vazios e Parciais
Antes de implementar uma configuração com novos campos obrigatórios, teste sempre o fluxo de trabalho completo com valores vazios e dados parciais. Isso inclui testar através da interface web, através da API e através de quaisquer ações automatizadas ou integrações que criem registos no Odoo. Este é um passo básico em qualquer tutorial técnico responsável sobre o Odoo.
Erros Comuns
Até mesmo implementadores experientes do Odoo enfrentam problemas com campos obrigatórios. Saber o que observar irá economizar tempo de depuração e prevenir reverter alterações dolorosas.
Armadilha 1: Tornar um Campo Obrigatório em um Modelo que Já Tem Registos
Se adicionar required=True a um campo em um modelo que já contém milhares de registos, e esses registos não têm um valor para esse campo, poderá enfrentar problemas quando esses registos forem editados na próxima vez. Os utilizadores não conseguirão salvar quaisquer alterações até preencherem o campo recém-obrigatório.
Antes de implementar uma restrição obrigatória em um campo existente, verifique sempre se os registos existentes já têm valores. Se não tiverem, execute uma migração de dados para preencher o campo primeiro.
Armadilha 2: Confundir Campos Obrigatórios a Nível de Visualização e a Nível de Modelo
Definir um campo como obrigatório em uma visualização (seja através do Studio ou XML de visualização) não impõe a restrição a nível de modelo. Um registo criado através da API, uma visualização diferente ou uma importação ignorará completamente as restrições obrigatórias a nível de visualização.
Se precisar de uma restrição rígida, defina required=True na definição do campo Python. Este é um ponto frequentemente mal compreendido na comunidade de tutoriais sobre campos do Odoo, e causa problemas reais de qualidade de dados em produção.
Armadilha 3: Campos Obrigatórios em Ações Automatizadas ou Agendadas
Quando uma ação automatizada ou uma ação agendada cria registos programaticamente, deve fornecer valores para todos os campos obrigatórios. Se a ação foi escrita antes de um campo obrigatório ser adicionado, começará a falhar silenciosamente ou com um erro críptico após a restrição obrigatória ser implementada.
Revise sempre todo o código de criação automática de registos após adicionar um campo obrigatório a um modelo existente.
Armadilha 4: Importar Dados que Faltam Campos Obrigatórios
Ao importar registos via CSV ou a ferramenta de importação do Odoo, os campos obrigatórios que estão ausentes do ficheiro de importação farão com que a importação falhe. Este é, na verdade, o comportamento correto, mas surpreende os utilizadores que estão habituados a importar dados parciais.
Inclua sempre todos os campos obrigatórios nos seus modelos de importação. É uma boa prática documentar quais campos são obrigatórios nas suas diretrizes de importação de dados.
Armadilha 5: Usar Obrigatório em vez de uma Restrição Python para Validação Complexa
O atributo required apenas verifica se um campo não está vazio. Não valida o conteúdo ou a relação entre campos. Para validação mais complexa (por exemplo, garantir que uma data está no futuro, ou que dois campos são consistentes), use um decorador @api.constrains em Python em vez disso.
Tentar codificar lógica de negócios apenas em campos obrigatórios leva a configurações inflexíveis que são difíceis de manter.
Conclusão
O atributo campo obrigatório é uma das ferramentas mais simples no Odoo, mas tem um impacto real na qualidade dos seus dados. Usado corretamente, garante que informações críticas sejam sempre capturadas no momento certo nos seus processos de negócios. Usado de forma inadequada, frustra os utilizadores e cria soluções alternativas que tornam os seus dados menos fiáveis, não mais.
A chave é entender a diferença entre restrições obrigatórias a nível de modelo e a nível de visualização, ser deliberado sobre quais campos realmente precisam de ser aplicados, e pensar antecipadamente sobre como a restrição se comportará em fluxos de trabalho automatizados e integrações de API.
Quer esteja a seguir um guia de desenvolvedor do Odoo, a realizar um projeto de personalização completo do Odoo, ou apenas a ajustar um formulário no Odoo Studio, o atributo obrigatório vale a pena entender profundamente. É um desses detalhes que separa uma implementação limpa do Odoo de uma que causa dores de cabeça seis meses após o lançamento.
Precisa de Ajuda com a Sua Implementação do Odoo?
Na Dasolo, ajudamos empresas a implementar, personalizar e otimizar o Odoo em todas as funções de negócios e níveis de complexidade. Quer precise de ajuda para desenhar um modelo de dados sólido, configurar regras de validação, ou construir módulos personalizados, a nossa equipe traz tanto expertise técnica quanto funcional a cada projeto.
Se tiver perguntas sobre campos obrigatórios ou qualquer outro aspecto da sua configuração do Odoo, estamos felizes em ajudar. Entre em contato connosco e vamos conversar sobre o que você está a construir.