Pular para conteúdo

07 Admin Streaming

O Django Admin é uma ferramenta robusta e personalizável, que permite gerenciar os dados do banco e configurar o backend da aplicação através de uma interface administrativa. A seguir, estão algumas das principais características de personalização do Django Admin, que tornam a ferramenta ainda mais poderosa para desenvolvedores e administradores:

1. ModelAdmin: Customização de Exibição dos Modelos

Através do ModelAdmin, você pode controlar a forma como cada modelo é exibido no Django Admin. Algumas personalizações incluem:

  • list_display: Define os campos que serão exibidos na lista de registros do modelo. Por exemplo:
class ContentAdmin(admin.ModelAdmin):
    list_display = ('title', 'content_type', 'is_public', 'created_at')
  • list_filter: Adiciona filtros laterais para facilitar a segmentação dos registros. Exemplo:
list_filter = ('content_type', 'is_public', 'created_at')
  • search_fields: Permite adicionar um campo de busca para procurar registros específicos. Exemplo:
search_fields = ('title', 'description')

2. Campos de Ordenação

Com a opção ordering, você pode definir a ordem padrão em que os registros serão exibidos.

ordering = ['-created_at']

3. Campos de Edição Inline

Django Admin permite editar objetos relacionados dentro de um formulário de outro objeto, usando inlines. Por exemplo, se você tem um modelo Comment relacionado a um Content, pode configurar o Comment como inline no ContentAdmin.

class CommentInline(admin.TabularInline):
    model = Comment
    extra = 1  # Número de campos de comentário exibidos inicialmente

class ContentAdmin(admin.ModelAdmin):
    inlines = [CommentInline]

4. Personalização dos Formulários de Edição

Você pode definir quais campos serão exibidos na página de edição, bem como organizá-los em seções:

  • fields: Define os campos que estarão disponíveis no formulário.
fields = ('title', 'description', 'file_url', 'thumbnail_url')
  • fieldsets: Agrupa os campos em seções, permitindo adicionar cabeçalhos de seção:
fieldsets = (
    ('Informações Básicas', {'fields': ('title', 'description')}),
    ('Detalhes do Arquivo', {'fields': ('file_url', 'thumbnail_url')}),
)

5. Ações Personalizadas

Com o Django Admin, você pode definir ações customizadas para executar operações em lote nos registros selecionados. Por exemplo, uma ação para marcar conteúdos como públicos:

def make_public(modeladmin, request, queryset):
    queryset.update(is_public=True)
make_public.short_description = "Marcar conteúdos como públicos"

class ContentAdmin(admin.ModelAdmin):
    actions = [make_public]

6. Filtros e Campos de Busca Personalizados

Além dos filtros de lista, você pode criar filtros personalizados para necessidades específicas e adicionar campos de busca dinâmicos.

  • Filtros Personalizados: Use o SimpleListFilter para definir filtros avançados.
from django.contrib.admin import SimpleListFilter

class PublicContentFilter(SimpleListFilter):
    title = 'public'
    parameter_name = 'is_public'

    def lookups(self, request, model_admin):
        return [('yes', 'Public'), ('no', 'Private')]

    def queryset(self, request, queryset):
        if self.value() == 'yes':
            return queryset.filter(is_public=True)
        if self.value() == 'no':
            return queryset.filter(is_public=False)

class ContentAdmin(admin.ModelAdmin):
    list_filter = (PublicContentFilter,)

7. Permissões e Controle de Acesso

O Django Admin permite definir permissões específicas por modelo e campo, como:

  • Permissões por modelo: No ModelAdmin, você pode restringir quem pode visualizar, adicionar, editar ou excluir registros.
  • Controle de campos específicos: Restringe quem pode ver ou editar campos específicos. Isso é feito criando métodos como has_change_permission.

8. Edição em Lote

A edição em lote facilita a atualização rápida de registros selecionados ao permitir que se aplique ações de uma só vez.

9. Customização de Templates e CSS

O Django permite que você substitua os templates do admin ou altere o CSS para refletir um estilo específico, modificando o visual da interface administrativa.

Exemplo Completo

from django.contrib import admin
from .models import Content, Comment

class CommentInline(admin.TabularInline):
    model = Comment
    extra = 1

class ContentAdmin(admin.ModelAdmin):
    list_display = ('title', 'content_type', 'is_public', 'created_at')
    list_filter = ('content_type', 'is_public', 'created_at')
    search_fields = ('title', 'description')
    ordering = ['-created_at']
    inlines = [CommentInline]
    actions = [make_public]
    fieldsets = (
        ('Informações Básicas', {'fields': ('title', 'description')}),
        ('Detalhes do Arquivo', {'fields': ('file_url', 'thumbnail_url')}),
    )

admin.site.register(Content, ContentAdmin)

Com essas configurações, o Django Admin se torna uma interface poderosa para a administração do seu app de streaming, com filtros, personalizações e uma aparência adaptada ao fluxo de trabalho. Isso otimiza o gerenciamento de conteúdo, facilitando a navegação e a organização dos registros.