Conteúdo do Curso

4.8 - Aba Domain: filtros estáticos e ad-hoc

Capítulo 4 How-to 8 min Lição 4.8

Aba Domain — filtros estáticos e ad-hoc

A aba Domain aparece sempre que há model_id configurado. Ela é onde você define um filtro estático que restringe os registros do item, sem afetar os outros itens do dashboard. É construída com o widget domain nativo do Odoo. Veja nos prints abaixo.

1
campo (Char)
3
tipos de filtro
N
regras por filtro
2
campos dinâmicos

O campo domain

Um único campo domain (tipo Char) com 3 camadas de informação: filtros estáticos, filtros ad-hoc e regras.

Aspecto O que faz
Tipo do campo Char armazenado como string serializada (ex.: "[('is_company', '=', True)]").
Widget domain nativo do Odoo — renderiza campos/operadores/valores em vez de texto bruto.
Default "[]" — sem filtro, todos os registros do model_id.
Aplicação search_count(domain) ou search_read(domain) — combinado com o filtro de data do dashboard.

Print 1 — aba Domínio com widget visual (E-mail não está... + E-mail = ""):

Aba Domínio - Missing Email

Note que o widget mostra "11 record(s)" logo abaixo — é a query ao vivo que confirma o filtro está produzindo o resultado esperado.

Como o widget domain funciona

Cada linha é uma regra com 3 campos visuais:

Campo

Dropdown com todos os campos do model_id. Mostra field_description (label humano) e armazena name técnico.

Operador

Dropdown com operadores: =, !=, <, >, <=, >=, like, ilike, in, not in, =, != (set), child_of, etc.

Valor

Texto livre, datetime picker, ou many2one autocomplete (depende do tipo do campo). Suporta tokens dinâmicos: uid, context_today(), etc.

3 tipos de filtro visual

O widget domain suporta 3 níveis lógicos combináveis:

Tipo Botão Quando usar Tradução para domain
Normal Acumula regras com AND implícito entre elas. ['&', rule1, rule2, rule3]
OR (múltiplos) Cria um grupo OR com as próximas regras adicionadas. ['|', rule1, rule2]
Avançado (clique em enquanto OR ativo) Aninha OR dentro de AND para lógicas complexas: (A OR B) AND C. ['&', '|', rule1, rule2, rule3]

Print 2 — domain Individuals com filtro simples (is_company = False):

Aba Domínio - Individuals

A regra mais simples: 1 campo, 1 operador, 1 valor. Conta apenas contatos que não são empresas.

Campos dinâmicos: uid e context_today()

O widget domain suporta 2 tokens dinâmicos especiais que são resolvidos em tempo de execução:

uid

ID do usuário logado. Quando você coloca uid como valor, o boardkit resolve para env.uid antes de aplicar o filtro.

Uso clássico: ('user_id', '=', uid) → mostra apenas registros do usuário atual.

context_today()

Data de hoje no timezone do usuário. Você pode passar parâmetros para ajustar: context_today(), context_today()-7, etc.

Uso clássico: ('date_deadline', '<', context_today()) → atividades atrasadas.

Print 3 — domain Open Activities com uid e filtros compostos:

Aba Domínio - Open Activities

3 regras: user_id = uid, active = definido, e date_deadline = definido — todas combinadas com AND implícito.

Quando o aviso não aparece

O aviso só some quando o domínio tem apenas literais puros:

  • [('is_company', '=', True)] ✓ sem aviso — literal booleano.
  • [('country_id', '=', False)] ✓ sem aviso — literal Python.
  • ['|', ('email', '=', False), ('email', '=', '')] ✓ sem aviso — OR com literais.
  • [('user_id', '=', uid)] ⚠️ com aviso — token dinâmico.
  • [('date_deadline', '<', context_today())] ⚠️ com aviso — chamada de função.
Por trás do widget

Cada regra vira uma tupla (campo, operador, valor) e o widget junta tudo numa lista Python. Não precisa decorar a sintaxe — basta montar pelo editor visual e o sistema cuida do resto.

Domain estático vs filtros do dashboard

São camadas independentes que se combinam:

Pipeline de filtragem
  1. Domain do item (esta aba) — aplicado primeiro, define o escopo do item.
  2. Date filter do item (aba Value) — restringe por janela de tempo.
  3. Dashboard filter (Capítulo 3) — restringe ainda mais por contexto do dashboard.
  4. Drill (aba Drill Down) — adiciona filtros à medida que o usuário clica.

Tudo se combina com AND. O resultado final é sempre a interseção.

Validação e erros comuns

Sintaxe válida

Cada regra é uma tupla (field, op, value). O widget garante a sintaxe básica.

Campo inexistente

Se você digitar manualmente um campo que não existe no model_id, o filtro vira 0 records (sem erro). Cheque sempre o preview.

Operador inválido

Cada ttype aceita operadores diferentes (ex.: like não funciona em integer). O widget filtra automaticamente.

Receitas prontas de domain

Os filtros mais comuns em dashboards reais:

Caso Filtro Quando usar
Apenas empresas[('is_company', '=', True)]Tiles de "Total Clientes".
Apenas pessoas[('is_company', '=', False)]Tiles de "Total Leads".
Sem e-mail['|', ('email', '=', False), ('email', '=', '')]Tile de qualidade de dados.
Sem país[('country_id', '=', False)]Tile de completeness.
Geolocalizados[('partner_latitude', '!=', 0), ('partner_longitude', '!=', 0)]Pré-filtro para mapas.
Atividades do usuário[('user_id', '=', uid), ('active', '=', True)]Tile "Minhas Atividades".
Atrasadas[('user_id', '=', uid), ('date_deadline', '<', context_today())]Tile "Atrasadas".
Últimos 30 dias[('create_date', '>=', (context_today() - datetime.timedelta(days=30)).strftime('%Y-%m-%d'))]Funil de captação.

Agora que você domina a aba Domain, vamos para a aba Appearance — onde ícones, cores e paletas transformam dados em comunicação visual.

Detalhe da aba Domain: campo único domain com widget domain nativo, 3 tipos de filtro (Normal/OR/Avançado), tokens dinâmicos (uid, context_today), notação prefix-polish, validação e receitas prontas.

Avaliação
0 0

Por enquanto não há comentários.

Quiz opcional da lição. Acerte de primeira e ganhe 10 XP (7 / 5 / 2 XP nas tentativas seguintes). Conta para a certificação.
1. Qual das expressões abaixo é um Domain válido para filtrar oportunidades ganhas?