Introdução
Um erro Many2One no Odoo surge quando um campo relacional que aponta para outro modelo está mal configurado, recebe um valor inválido ou aponta para um registo inexistente. Como estes campos estabelecem ligações diretas entre registos, qualquer problema nessa ligação pode bloquear formulários, regras de validação ou automatismos.
Normalmente esses erros aparecem na camada de interface, sobretudo ao criar ou editar registos, mas também são frequentes durante importações e migrações de dados.
Este artigo apresenta as razões mais comuns para erros Many2one e descreve passos práticos para os resolver de forma segura.
O que é um campo Many2one no Odoo?
Um campo Many2one cria uma relação entre o modelo atual e outro modelo, funcionando como uma chave estrangeira que liga dois registos.
Exemplo prático:
partner_id = fields.Many2one(
'res.partner',
string="Customer",
required=True
)
Isto implica que:
- Cada registo referencia um único parceiro
- Vários registos podem referir o mesmo parceiro
Se a referência estiver inválida ou mal configurada, o Odoo exibirá um erro.
Causas comuns de erros em campos Many2one no Odoo
1. Referência a registo inválido
Quando o Many2one aponta para um ID que não existe, o Odoo impede a operação.
Exemplo prático:
- ID do registo eliminado
- ID incorreto durante uma importação
- API a enviar referência errada
Estas situações costumam originar mensagens tipo “Record does not exist” ou erros de validação.
2. Campo Many2one obrigatório ausente
Quando o campo está definido como:
required=True
E fica vazio no formulário, o Odoo lança uma validação obrigando o preenchimento.
3. Filtro de domínio a impedir seleções
Os campos Many2one frequentemente têm filtros de domínio aplicados:
partner_id = fields.Many2one(
'res.partner',
domain=[('customer_rank', '>', 0)]
)
Se nenhum registo cumprir esse domínio, o utilizador não consegue escolher um valor, o que gera frustração ou erros de validação.
4. Restrições de permissões de acesso
Se o utilizador atual não tem direitos de leitura sobre o modelo relacionado, o campo Many2one pode falhar ao carregar.
Isto pode manifestar-se como:
- AccessError
- Dropdown vazio
- Comportamento inesperado na interface
5. Referência a modelo inexistente
Se o Many2one aponta para um modelo que não existe:
fields.Many2one('non.existing.model')
O Odoo pode falhar durante a instalação do módulo.
6. Restrições em ambientes multiempresa
Se o registo relacionado pertencer a outra empresa, o Odoo pode bloquear a seleção ou o acesso.
Isto é comum em instalações com várias empresas configuradas.
Como corrigir erros Many2one no Odoo
Passo 1 – Verificar existência do modelo relacionado
Confirme que o nome do modelo em:
fields.Many2one('res.partner')
está correto e que o módulo correspondente está instalado.
Passo 2 – Confirmar existência do registo
Se o erro indicar um ID específico:
- Verifique se o registo foi eliminado
- Valide os dados durante a importação
- Prefira IDs externos (external IDs) em vez de usar IDs de base de dados directos
Passo 3 – Rever filtros de domínio
Remova temporariamente ou simplifique os domínios para testar se estão a impedir seleções legítimas.
Passo 4 – Verificar permissões de acesso
Assegure que o utilizador tem:
- Permissão de leitura no modelo relacionado
- Grupos de utilizadores configurados corretamente
Teste com um Administrador para confirmar se o problema é de permissões.
Passo 5 – Validar configuração de obrigatoriedade
Se o campo for obrigatório:
- Inclua-o de forma visível na vista de formulário
- Defina um valor por defeito quando apropriado
Passo 6 – Testar contexto multiempresa
Altere o contexto da empresa e verifique se o registo passa a ser visível.
Como evitar erros Many2one
- Boas práticas: evite IDs codificados em rigidez
- Use external IDs nas importações
- Mantenha domínios simples e bem documentados
- Garanta que os modelos relacionados estão instalados antes de fazer deploy
- Teste a lógica relacional após actualizações de módulos
As relações Many2one são a base do modelo de dados do Odoo. Um desenho relacional limpo evita grande parte dos problemas do ORM.
Como a Dassolo garante consistência relacional no Odoo
Erros Many2one costumam denunciar inconsistências mais profundas entre modelos em vez de meros deslizes de configuração. Em ambientes Odoo complexos é habitual que a origem seja referências inválidas, registos pai eliminados, domínios mal construídos ou incompatibilidades de payload em integrações.
Na Dassolo tratamos problemas Many2one olhando para o fluxo relacional como um todo. Estes erros tendem a originar-se em:
- Referências estrangeiras incorretas
- Ordem inadequada na criação de registos durante integrações
- Validações insuficientes antes de associar relações
- Inconsistências entre empresas (multi-company)
- Manipulação directa da base de dados fora do ORM
Para garantir integridade relacional privilegiamos modelação de dados clara, gestão controlada do ciclo de vida dos registos e uso rigoroso do ORM. Uma arquitectura relacional bem estruturada reduz significativamente erros Many2one em produção.
Conclusão
O “erro Many2One” no Odoo aparece quando um campo relacional aponta para um registo inválido, ausente ou inacessível. Embora a mensagem possa surgir na interface ou nos logs, a causa real quase sempre está ligada à integridade relacional ou ao fluxo de dados.
Validar os registos antes de os atribuir, evitar eliminações inseguras e manter relações de modelo consistentes permite evitar falhas recorrentes. O tratamento correcto de campos Many2one é essencial para preservar a integridade da base de dados e o comportamento previsível do sistema.
Resolver erros ao nível da arquitectura relacional fortalece a estabilidade global e facilita a manutenção a longo prazo das implementações Odoo.
Perguntas frequentes
Não. Podem ocorrer em qualquer versão do Odoo.
Sim. Mapeamentos relacionais incorretos causam falhas de sincronização de dados.
Só quando a lógica de negócio exigir realmente essa obrigatoriedade.