Verificado contra: django-unfold 0.104.1
Documentação: https://unfoldadmin.com/docs/ , https://github.com/unfoldadmin/django-unfold
Dependências: nenhuma. Relacionado: unfold-installation, unfold-modeladmin, unfold-settings, unfold-navigation.
Unfold Core — Modelo Mental & Roteamento
Propósito
Estabelecer o modelo mental correto para o trabalho com Unfold: Unfold é uma camada de reestilização e aprimoramento sobre o django.contrib.admin, não uma substituição. Quase tudo que o Unfold faz é Django admin com novos templates (Tailwind), um dicionário de configurações e recursos opcionais extras (actions, filtros, abas, componentes, paleta de comandos).
Um agente que internalizar as regras de camadas abaixo não atribuirá funcionalidades incorretamente, não lutará contra os mecanismos do Django e não inventará configurações.
Regras de camadas
Cada capacidade pertence exatamente a uma camada:
| Camada | O que cobre | Exemplos |
|---|---|---|
[DJANGO] | Mecanismos padrão do admin — Unfold apenas altera a aparência | list_display, search_fields, fieldsets, inlines, get_queryset(), has_*_permission, dropdown de actions, autocomplete_fields, raw_id_fields, paginação da lista |
[UNFOLD] | Adições oficiais do Unfold — dicionário de settings, apps contrib, decorators, componentes, mixins | UNFOLD = {...}, unfold.admin.ModelAdmin, @display, @action, unfold.contrib.filters, UnfoldModelAdminViewMixin, BaseComponent, InfinitePaginator, actions_list/row/detail/submit_line, abas, paleta de comandos |
[CUSTOM] | Código de nível de projeto que o agente escreve | templates/admin/index.html override, build Tailwind, views personalizadas com formulários, camadas de serviço/queryset, componentes personalizados |
[STUDIO] | Capacidades do plugin pago Unfold Studio | layout boxed, cabeçalho fixo, sidebar mínima, sidebar escura forçada, banner, navegação aninhada, templates de dashboard. Veja a skill unfold-studio para equivalentes da API pública. |
Regra: atribua uma funcionalidade à camada mais baixa que a forneça. Se o Django puro faz, recomende o Django puro.
Tabela de roteamento (qual mecanismo para qual necessidade)
| Usuário deseja | Mecanismo | Skill |
|---|---|---|
| CRUD para um modelo | ModelAdmin (Django) | unfold-modeladmin |
| Operação em lote em linhas selecionadas | actions (dropdown Django) ou actions_list do Unfold | unfold-actions |
| Operação em uma linha a partir da lista | actions_row | unfold-actions |
| Operação em um objeto a partir da página de detalhes | actions_detail | unfold-actions |
| Botão extra de modo de salvamento no formulário de alteração | actions_submit_line | unfold-actions |
| Diálogo de confirmação antes de uma ação | @action(dialog={...}) | unfold-actions |
| Painel lateral de filtro no changelist | list_filter (+ classes de filtro do Unfold) | unfold-filters |
| Caixa de pesquisa no changelist | search_fields (Django) | unfold-modeladmin |
| Marca/título/logo global | configurações UNFOLD | unfold-settings |
| Menu lateral com ícones/badges | UNFOLD["SIDEBAR"] | unfold-navigation |
| Abas extras acima do changelist/changeform | UNFOLD["TABS"] | unfold-tabs |
| Abas dentro do formulário do changeform | fieldsets com classe "tab", inline com tab = True | unfold-tabs |
| Página não-CRUD (analytics, wizard) | view admin personalizada (UnfoldModelAdminViewMixin) | unfold-custom-pages |
| Página inicial do admin com cards/gráficos | DASHBOARD_CALLBACK + override de templates/admin/index.html, ou página personalizada | unfold-dashboard |
| Objetos relacionados no changeform | inlines (Django; classes base do Unfold) | unfold-inlines |
| Agrupamento de campos no changeform | fieldsets (Django; Unfold adiciona classes de aba) | unfold-modeladmin, unfold-tabs |
| Lista compacta de campos repetíveis | ArrayWidget | unfold-fields |
| Edição de rich text | WysiwygWidget | unfold-fields |
| Mudança visual de cor/tema | UNFOLD["COLORS"], BORDER_RADIUS, THEME | unfold-theming |
| Qualquer coisa além das configurações visualmente | Tailwind/override de template | unfold-tailwind |
| Tabela grande e paginação lenta | InfinitePaginator | unfold-performance |
| Dados de modelo na paleta cmd+K | UNFOLD["COMMAND"] | unfold-navigation |
| Tabelas de registros relacionados em linhas do changelist (expansível) | list_sections com TableSection/TemplateSection | unfold-modeladmin |
| Changelist secundário no changeform | change_form_datasets (BaseDataset) | unfold-modeladmin |
Quando a configuração NÃO é suficiente (implementação personalizada necessária):
- Qualquer coisa com formulário + POST que não seja um diálogo de ação → página personalizada (
unfold-custom-pages). - Dashboard mais rico que componentes → override de template de dashboard + Tailwind (
unfold-dashboard). - Efeitos visuais não expostos como configurações → Tailwind CSS ou override de template (
unfold-tailwind,unfold-studio). - Lógica de negócio além de mutações simples → camada de serviço, nunca métodos de ModelAdmin (
unfold-production).
Regras de ouro
- Toda classe admin deve herdar de
unfold.admin.ModelAdmin(e todo inline deunfold.admin.TabularInline/StackedInline) ou as páginas serão renderizadas sem estilo. ModelAdmins de terceiros precisam de novo registro com as bases do Unfold. "unfold"deve vir antes dedjango.contrib.adminemINSTALLED_APPS. Apps contrib (unfold.contrib.filters,unfold.contrib.forms,unfold.contrib.inlines) vêm imediatamente após.- Unfold não substitui URLs do admin, caminho de templates (
admin/base_site.htmlextends funcionam) ou a maquinaria de permissão do Django — estenda, não lute. - Nunca codifique hardcoded internos do Unfold (nomes de templates além dos componentes documentados, template tags privadas); use apenas configurações/classes documentadas.
- Lógica de negócio não vive em ModelAdmin. ModelAdmin é uma camada HTTP/permissões sobre uma camada de serviço. Veja
unfold-production. - Unfold muda rapidamente; qualquer coisa se comportando inesperadamente → verifique
docs/version-notes.mde a documentação atual antes de depurar mais fundo.
Fatos de versão (verificados)
- Lançamento PyPI atual:
0.104.1(este conjunto verificado contra ele). - Requer Python ≥3.12, Django ≥5.2 (
requires_dist: django>=5.2). - Tailwind v4 desde 0.56.0 (quebrou folhas de estilo personalizadas v3).
- Unfold funciona junto com o admin padrão; adoção incremental é OK.
Skills relacionadas
Carregue unfold-installation para tarefas de configuração; todo o resto roteia a partir da tabela acima.