Os campos somente leitura são uma daquelas funcionalidades no Odoo que parecem simples à primeira vista, mas desempenham um papel muito maior do que a maioria dos utilizadores espera.
Quer você seja um utilizador empresarial a perguntar-se por que certos campos estão desativados, ou um desenvolvedor a tentar controlar o comportamento dos campos na sua personalização do Odoo, este guia cobre tudo o que você precisa saber.
Compreender como os campos somente leitura funcionam é fundamental para construir fluxos de trabalho fiáveis, proteger a integridade dos dados e proporcionar uma experiência mais suave para a sua equipa.
Este tutorial sobre campos do Odoo aborda tanto os lados empresariais quanto técnicos do somente leitura, portanto, quer você esteja configurando o Odoo ou construindo sobre ele, encontrará aqui o que precisa.
O que é o campo somente leitura no Odoo
Um campo somente leitura no Odoo é um campo que exibe um valor, mas não pode ser editado diretamente pelo utilizador através da interface. Os dados são visíveis, mas a entrada está bloqueada.
Na vista de formulário, campos somente leitura normalmente aparecem como texto simples em vez de caixas de entrada interativas. Dependendo do tema do Odoo, eles podem parecer ligeiramente desbotados ou simplesmente planos em comparação com campos editáveis.
Dentro do modelo de dados do Odoo, o comportamento somente leitura pode ser aplicado em dois níveis distintos:
- No nível do campo (Python/ORM): o campo é sempre somente leitura em todas as vistas e contextos
- No nível da vista (XML): o campo é somente leitura em uma vista específica ou sob condições específicas
Essa distinção é importante. Um campo marcado como somente leitura no nível ORM não pode ser editado através de qualquer interface de usuário. Um campo marcado como somente leitura no nível da vista está protegido nesse contexto particular, mas ainda pode ser gravável em outras vistas ou através de código do lado do servidor.
Somente leitura não é um tipo de campo por si só. É um atributo que pode ser aplicado a qualquer um dos tipos de campo padrão do Odoo: Char, Integer, Float, Many2one, Date, e outros. Esta é uma parte central do framework Odoo para controlar como os campos se comportam em tempo de execução.
Como funciona o campo somente leitura
Para entender como os campos somente leitura se comportam, é útil olhar para ambos os lados: o ORM do Odoo (Python) e a camada de vista (XML).
Somente leitura no nível ORM
No ORM do Odoo, um campo pode ser declarado como permanentemente somente leitura diretamente no modelo Python. Isso é mais comum para campos computados que derivam seu valor de outros dados. A definição do campo inclui readonly=True como um parâmetro, e o Odoo nunca permitirá que o usuário o edite através da UI.
Esse nível de somente leitura é parte da API de campos Python do Odoo e está documentado no guia oficial do desenvolvedor do Odoo. Aplica-se globalmente, independentemente de qual vista está sendo usada.
Readonly baseado em estado
Um dos padrões mais comuns no desenvolvimento do Odoo é tornar um campo somente leitura com base no estado atual de um documento. É assim que módulos padrão como Vendas, Compras e Contabilidade bloqueiam seus dados uma vez que um documento ultrapassa a fase de rascunho.
No Odoo 16 e versões anteriores, isso era feito usando o atributo attrs no XML de visualização, combinando uma condição de domínio com o elemento de campo. No Odoo 17 e versões posteriores, a sintaxe é mais concisa e escrita diretamente como uma expressão inline no elemento de campo.
Ambas as abordagens alcançam o mesmo resultado: o campo é editável enquanto o documento está em rascunho e se torna bloqueado uma vez que avança pelo fluxo de trabalho. Este é um conceito fundamental em qualquer tutorial técnico do Odoo que aborde a configuração de campos.
Campos Computados e Somente Leitura
Os campos computados do Odoo são somente leitura por padrão. Quando você define um campo com um método compute, o Odoo assume que ele não deve ser editado diretamente porque seu valor é derivado automaticamente de outros campos.
Se você quiser que um campo computado também seja armazenado, você define tanto o parâmetro compute quanto store=True. Esses campos de banco de dados armazenados do Odoo são um padrão comum para otimização de desempenho, uma vez que podem ser usados em filtros de pesquisa e ordenados de forma eficiente no nível do banco de dados sem recalcular valores em tempo real.
Tornando um Campo Computado Gravável
Se você precisar que um campo computado também aceite entrada manual, pode definir um método inverso ao lado dele. O método inverso diz ao Odoo o que fazer quando um usuário escreve um valor no campo computado. Sem um inverso, o campo permanece somente leitura por padrão. Isso faz parte da API de tipos de campo ORM do Odoo mais avançada e é abordado em profundidade no guia do desenvolvedor do Odoo.
Casos de uso empresarial
Campos somente leitura aparecem em todos os módulos do Odoo. Aqui estão cinco exemplos práticos de fluxos de trabalho empresariais reais.
1. CRM: Bloqueando Dados de Oportunidades Ganhas e Perdidas
No módulo CRM, a receita esperada e a data de fechamento são editáveis enquanto um lead está sendo trabalhado. Uma vez que uma oportunidade é marcada como Ganha ou Perdida, esses campos são definidos como somente leitura para preservar um registro preciso do que foi fechado e a que valor.
Isso impede que alguém volte e ajuste os números depois do fato, o que distorceria relatórios de vendas e análises de pipeline.
2. Vendas: Protegendo Linhas de Pedido Confirmadas
Quando uma ordem de venda passa de Rascunho para Confirmada, as linhas do pedido tornam-se somente leitura. Os utilizadores já não podem alterar o produto, a quantidade ou o preço após o cliente ter recebido uma confirmação.
Se forem realmente necessárias alterações, a ordem deve ser explicitamente redefinida para rascunho, o que cria um registo de auditoria e torna a correção intencional em vez de acidental.
3. Inventário: Quantidades de Movimentação de Stock Validadas
Nas operações de armazém, uma vez que uma entrega ou receção é validada, as quantidades realizadas ficam bloqueadas. Isto protege a integridade da avaliação de stock e garante que os registos correspondem ao que se moveu fisicamente pelo armazém.
Quantidades editáveis após a validação poderiam corromper silenciosamente os níveis de inventário em várias localizações.
4. Contabilidade: Linhas de Lançamento de Diário Publicadas
Na contabilidade, uma vez que um lançamento de diário é publicado, todas as suas linhas tornam-se somente leitura. Isto é tanto um requisito legal em muitos países como um princípio fundamental da contabilidade de dupla entrada.
Permitir edições após a publicação comprometeria a fiabilidade das demonstrações financeiras e criaria sérios riscos de conformidade.
5. Fabricação: Dados de Ordem de Trabalho Concluída
No módulo de Fabricação, uma vez que uma ordem de trabalho é marcada como concluída, a duração real e as quantidades produzidas são definidas como somente leitura. Isto preserva registos de produção precisos que alimentam a análise de custos e o acompanhamento de desempenho.
Criando ou personalizando um campo somente leitura
Existem dois caminhos principais para configurar campos somente leitura no Odoo: usando o Odoo Studio para uma abordagem sem código, ou escrevendo Python e XML diretamente para um controlo técnico total.
Usando o Odoo Studio
Os campos do Odoo Studio facilitam a adição ou modificação do comportamento de somente leitura sem escrever qualquer código. Para configurar um campo como somente leitura usando o Studio:
- Abra o Odoo Studio a partir do menu principal (o ícone do lápis)
- Navegue até a visualização do formulário onde deseja configurar o campo
- Clique no campo que deseja modificar
- No painel de propriedades do lado direito, ative a opção "Somente leitura"
- Salve e feche o Studio
O Studio também permite definir um comportamento condicional de somente leitura usando expressões de domínio. Por exemplo, você pode tornar um campo somente leitura apenas quando um campo de status for igual a um valor específico, sem escrever uma única linha de código.
A abordagem de criar campos no Odoo Studio é a escolha certa para consultores e administradores que precisam impor regras de dados de forma rápida e segura. As alterações feitas através do Studio são armazenadas no banco de dados e não serão sobrescritas por atualizações de módulos.
Usando Python para Personalização Técnica
Para desenvolvedores que constroem módulos Odoo personalizados, o atributo somente leitura é definido diretamente na definição do campo no modelo Python. Este é o uso padrão de campos Python no Odoo e é abordado em todos os guias de desenvolvedor do Odoo.
Você pode definir readonly=True como um parâmetro estático em qualquer tipo de campo, tornando-o permanentemente não editável. Para um controle mais flexível, o parâmetro states permite que você defina em quais estados do documento o campo deve ser gravável versus somente leitura.
Essa abordagem é particularmente útil quando você está adicionando campos personalizados a modelos Odoo existentes como parte de um projeto de personalização do Odoo. Ela mantém a lógica do campo próxima ao modelo de dados, em vez de espalhada por vários arquivos de visualização.
Usando Atributos de Visualização XML
Para comportamento somente leitura a nível de visualização, você adiciona o atributo readonly diretamente ao elemento do campo no seu XML de visualização. Isso faz parte do fluxo de trabalho padrão de desenvolvimento do Odoo para qualquer personalização técnica.
A vantagem do somente leitura a nível de visualização é a flexibilidade: o mesmo campo pode se comportar de maneira diferente em diferentes visualizações, ou sob diferentes condições, sem alterar a definição subjacente do campo. Esta é frequentemente a abordagem preferida quando você precisa adicionar restrições a campos padrão existentes sem modificar sua definição em Python.
No Odoo 17, a sintaxe de expressão inline para condições de somente leitura é mais limpa e legível do que a sintaxe de dicionário attrs usada em versões anteriores. Ambas as abordagens são válidas, dependendo da versão do Odoo que você está usando.
Melhores práticas
Usar campos somente leitura corretamente se resume a aplicá-los no nível certo, pela razão certa. Aqui estão as diretrizes mais importantes de uma perspectiva de consultoria Odoo.
1. Prefira Somente Leitura a Nível de Visualização Quando o Contexto Variar
Se um campo precisa ser somente leitura apenas em certos estados de documento ou em visualizações específicas, aplique o somente leitura a nível de visualização em vez de a nível de modelo. Isso mantém seu modelo de dados Odoo flexível e permite que processos de backend ou integrações de API ainda escrevam no campo quando necessário.
2. Alinhe Condições de Somente Leitura com o Ciclo de Vida do Documento
Suas condições de somente leitura devem corresponder ao fluxo natural dos seus documentos. Os campos devem ser bloqueados quando o documento atinge um estado onde edições adicionais causariam problemas. Isso cria uma experiência previsível e intuitiva para os usuários, que é uma das características de uma personalização Odoo bem implementada.
3. Teste Entre Funções de Usuário
O comportamento somente leitura pode interagir com direitos de acesso de maneiras inesperadas. Sempre teste sua configuração tanto como um usuário padrão quanto como um administrador para verificar se o campo se comporta corretamente para cada função. O que parece somente leitura para um grupo de usuários pode ainda ser editável para outro, dependendo de seu perfil.
4. Combine Somente Leitura com Obrigatório Onde Faz Sentido
Em formulários de múltiplas etapas, um campo pode ser obrigatório no rascunho, mas somente leitura em estados posteriores. Você pode combinar ambos os atributos no seu XML de visualização para impor esse padrão de forma clara. Isso é comum para campos como datas de entrega ou números de referência que devem ser preenchidos antes que um documento seja confirmado.
5. Documente Sua Lógica de Somente Leitura
No desenvolvimento personalizado do Odoo, especialmente em modelos de dados complexos, sempre adicione um comentário explicando por que um campo é somente leitura. Desenvolvedores futuros que mantêm o código precisam entender a razão comercial por trás da restrição, não apenas a implementação técnica.
6. Use Campos do Studio para Mudanças Rápidas e Seguras para Atualizações
Para casos de uso simples, os campos do Odoo Studio oferecem uma maneira rápida e segura para atualizações de adicionar comportamento somente leitura. Reserve a personalização em Python para casos em que o Studio não pode fornecer a lógica necessária, como condições complexas entre campos ou integração com campos computados personalizados.
Erros comuns
Até mesmo usuários e desenvolvedores experientes do Odoo enfrentam os mesmos problemas com campos somente leitura. Aqui estão os que vale a pena conhecer antes que te peguem de surpresa.
Confundindo Somente Leitura em Nível de Visualização com uma Fronteira de Segurança
Um campo definido como somente leitura em uma visualização não impede atualizações através da API XML-RPC, chamadas de escrita ORM em Python ou ações do servidor. A somente leitura em nível de visualização é uma restrição de UI, não um controle de segurança. Se você realmente precisa impedir todas as gravações em um campo, precisa impor isso no nível ORM ou através de regras de controle de acesso, não apenas na visualização.
Tornando Campos Permanentemente Somente Leitura Quando Condicional Seria Melhor
É tentador bloquear completamente um campo quando você quer protegê-lo. Mas se os usuários legitimamente precisam editá-lo em certas situações, como ao redefinir um documento para rascunho, um somente leitura permanente no nível ORM os bloqueará completamente, incluindo quaisquer fluxos de trabalho de correção. Sempre pense em todo o ciclo de vida antes de escolher permanente em vez de condicional.
Esquecendo-se dos Métodos Onchange
Se um campo somente leitura também for referenciado em um método onchange, esse método ainda pode tentar atribuir um valor a ele. Isso pode produzir um comportamento confuso onde o campo parece ser atualizado durante a interação do usuário, mas depois reverte ou aciona um erro. Certifique-se de que sua lógica onchange leve em conta campos somente leitura.
Não Aplicar Readonly Consistentemente em Todas as Vistas
Um campo marcado como readonly na vista de formulário pode ainda ser editável na vista de lista ou na vista kanban se essas vistas não incluírem a mesma restrição. Verifique sempre se a sua configuração de readonly é aplicada de forma consistente em cada vista onde o campo aparece.
Efeitos Colaterais ao Herdar Modelos Padrão
Ao herdar de um modelo padrão do Odoo e adicionar readonly=True a um campo existente, essa alteração afeta todas as vistas que mostram esse campo, incluindo as padrão. Certifique-se de que isso é intencional e que não quebrará o comportamento padrão do Odoo ou entrará em conflito com outras personalizações no mesmo modelo.
Conclusão
Os campos readonly são uma ferramenta fundamental no Odoo para guiar os usuários através dos fluxos de trabalho, proteger a integridade dos dados e impor regras de negócios sem depender apenas de treinamento.
A chave é saber quando aplicar readonly ao nível da vista versus ao nível do modelo, e garantir que as condições estejam alinhadas com a forma como sua equipe realmente trabalha. Um modelo de dados Odoo bem configurado sempre faz uso reflexivo de campos readonly nos momentos certos do ciclo de vida do documento.
Quer você os configure através do Odoo Studio para uma abordagem sem código ou os defina diretamente em Python e XML como parte de um projeto de desenvolvimento Odoo mais amplo, a lógica por trás dos campos readonly permanece consistente: mostrar os dados, mas protegê-los de alterações não intencionais.
Eles podem não ser o tópico mais discutido na personalização do Odoo, mas são silenciosamente um dos mais impactantes.
Na Dasolo, ajudamos empresas a implementar, personalizar e otimizar o Odoo em todos os módulos e indústrias. Se você precisar de ajuda para configurar campos, projetar fluxos de trabalho confiáveis ou melhorar seu modelo de dados Odoo, nossa equipe está pronta para apoiá-lo. Entre em contato e nos conte sobre o seu projeto.