Introdução
Um erro de campo relacionado no Odoo surge quando um campo definido com o atributo related= não consegue resolver a sua referência em tempo de execução. Normalmente vê-se a falha no log do servidor, e o problema pode impedir que vistas de formulário carreguem, cálculos sejam atualizados ou automatizações corram corretamente.
Campos relacionados são úteis porque expõem valores de outro modelo sem duplicar dados. Mas essa comodidade depende de uma cadeia de relações correta: se algum elo estiver mal definido, o Odoo sinaliza erros de validação ou atributos.
Este guia destrinça as razões por que esses erros aparecem e descreve passos práticos para os corrigir sem causar regressões no sistema.
O que é um campo relacionado no Odoo?
Um campo relacionado permite referenciar, a partir do modelo atual, um campo que pertence a outro modelo.
Exemplo prático:
partner_email = fields.Char(
related="partner_id.email",
store=True
)
Em termos simples, isto indica o seguinte:
- O modelo atual tem um campo Many2one chamado partner_id
- O campo relacionado espelha o valor email do modelo res.partner
Se qualquer segmento dessa cadeia estiver incorreto, o Odoo gera um erro de campo relacionado.
Causas mais comuns de erros em campos relacionados no Odoo
1. Caminho de relação incorreto
Quando o caminho apontado no atributo related refere-se a um campo inexistente:
related="partner_id.non_existing_field"
o módulo pode falhar ao carregar ou disparar uma exceção em tempo de execução.
2. Falta da relação Many2one
Se partner_id não estiver declarado no modelo, o Odoo não consegue resolver a relação usada em related=.
3. Campo relacionado não armazenado usado em domínios
Quando o campo relacionado não tem store=True, mas é utilizado em:
- domínios de pesquisa,
- filtros,
- agrupamentos (group by),
pode provocar comportamento inesperado ou erros.
Exemplo prático:
store=False
Mas usado em pesquisas → pode causar falhas.
4. Acesso a relações nulas
Se partner_id estiver vazio, aceder a partner_id.email pode originar problemas em certos contextos.
Embora o Odoo trate muitos nulos de forma segura, cadeias relacionadas em lógica personalizada podem falhar.
5. Incompatibilidade de tipo de campo
Se o tipo declarado no campo relacionado não coincide com o tipo do campo de origem:
Exemplo prático:
partner_email = fields.Integer(related="partner_id.email")
a discrepância de tipo produz erros de validação.
6. Alterações na estrutura durante upgrade de módulos
Após atualizar um módulo:
- nomes de campos podem ter mudado,
- caminhos de relação podem ter sido rompidos,
- dependências podem ter sido alteradas,
os campos relacionados são sensíveis a mudanças estruturais.
Como resolver erros de campos relacionados no Odoo
Passo 1 – Validar o caminho de relação
Confirme que toda a cadeia existe e está bem escrita:
related="partner_id.email"
Verifique que:
- partner_id existe no modelo atual,
- email existe no modelo alvo (res.partner),
Passo 2 – Confirmar compatibilidade de tipos
Se o campo fonte é Char, o campo relacionado também deve ser Char; mantenha tipos coerentes para evitar validações.
Passo 3 – Definir store=True quando for necessário
Se o campo relacionado participa em pesquisas, relatórios ou filtros, marque store=True,
store=True
caso contrário o Odoo pode comportar-se de forma imprevisível em consultas avançadas.
Passo 4 – Verificar erros no carregamento do modelo
Se o erro surge durante a instalação ou atualização do módulo:
- reinicie o serviço Odoo,
- actualize o módulo,
- analise o traceback completo,
muitas vezes os erros de campo relacionado manifestam-se na inicialização dos modelos.
Passo 5 – Rever dependências após um upgrade
Se o problema apareceu depois de:
- uma actualização do Odoo,
- ou de um módulo personalizado,
garanta que os caminhos de relação ainda existem e que os modelos dependentes continuam compatíveis.
Como evitar erros em campos relacionados
- Mantenha cadeias de relação curtas e explícitas,
- evite encadeamentos profundos de related,
- garanta sempre a correspondência de tipos de campo,
- use store=True quando o campo for usado em domínios ou filtros,
- teste upgrades em ambiente de staging antes de levar para produção,
Campos relacionados são úteis, mas frágeis quando a estrutura dos modelos evolui sem cuidado.
Como a Dasolo projeta arquiteturas relacionais fiáveis
Erros em campos relacionados surgem com frequência quando as cadeias relacionais ficam demasiado complexas ou quando modelos herdados mudam sem actualizações sincronizadas.
O registo do servidor pode mostrar apenas um traceback curto, mas essa linha no log costuma ser sintoma de inconsistências estruturais mais profundas nas relações entre modelos.
Na Dasolo, tratamos este tipo de falhas avaliando toda a cadeia relacional em vez de corrigir apenas o campo apontado no erro. Geralmente encontramos problemas como:
- referências a campos erradas ou desactualizadas,
- hierarquias de herança muito profundas,
- cadeias relacionadas com vários níveis,
- processos de upgrade de módulo mal controlados,
- incompatibilidades relacionadas com contexto multi-empresa,
Para garantir estabilidade a longo prazo, privilegiamos mapeamento relacional explícito, extensões de modelo controladas e reduzir a profundidade de dependências. Um design relacional limpo evita falhas em cascata e torna os módulos personalizados mais fáceis de manter.
Conclusão
O “Erro de Campo Relacionado” do Odoo aparece quando um campo não consegue resolver correctamente a referência, frequentemente por definições de modelos incorretas, conflitos de herança ou dependências em falta. Embora pareça um problema de configuração simples, a origem é muitas vezes um desalinhamento arquitectónico mais profundo.
Ao rever as cadeias relacionais, validar a herança de modelos e garantir que campos referenciados se mantêm estáveis após upgrades, os desenvolvedores eliminam recorrências deste erro. Uma arquitectura relacional bem organizada resolve o problema e aumenta a clareza e escalabilidade do sistema.
Uma abordagem disciplinada às relações entre modelos torna o Odoo previsível, mais fácil de manter e robusto à medida que a complexidade funcional cresce.
Perguntas frequentes
Não. Podem ocorrer em Odoo 14, 15, 16 e 17.
Sim. Campos relacionados não armazenados podem degradar o desempenho em grandes conjuntos de registos.
Não sempre — apenas quando for necessário para pesquisa, filtragem ou relatórios.