Conteúdo
Para habilitar a interface administrativa do Django:
em settings.py, instale a aplicação django.contrib.admin:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin', # <----
)
em urls.py, descomente as linhas ligadas ao admin:
from django.contrib import admin # <----
admin.autodiscover() # <----
urlpatterns = patterns('',
'...'
(r'^admin/', include(admin.site.urls)), # <----
'...'
)
execute o comando ./manage.py syncdb para que o Django crie as tabelas administrativas
Exemplo:
from django.contrib import admin
from pizza.entrega.models import Pedido, Pizza, Entregador
class PizzaInline(admin.TabularInline):
model = Pizza
class PedidoAdmin(admin.ModelAdmin):
inlines = [PizzaInline]
list_display = ('entrou', 'cliente',
'nome_entregador', 'partiu', 'despachado')
list_display_links = ('entrou', 'cliente')
class PizzaAdmin(admin.ModelAdmin):
list_display = ('pedido', '__unicode__')
admin.site.register(Pedido, PedidoAdmin)
admin.site.register(Pizza, PizzaAdmin)
admin.site.register(Entregador)
Na instância de ModelAdmin:
class ClienteAdmin(admin.ModelAdmin):
list_display = ('fone', 'contato', 'endereco')
list_display_links = ('fone', 'contato')
search_fields = ('fone', 'contato', 'logradouro', 'numero')
Alguns metadados aplicados a métodos no modelo ou funções em admin.py alteram a exibição de resultados no admin.
Se True, o admin exibe um marcador verde se o resultado for verdadeiro, ou vermelho se não for.
class Pedido(models.Model):
'...'
def despachado(self):
return self.entregador and self.partida
despachado.boolean = True
Se True, os tags HTML contidos no resutado ficam intactos; do contrário, eles são suprimidos (suprimir tags é o comportamento padrão, por motivos de segurança).
class Tarefa(models.Model):
'...'
def rotulo(self):
fmt = '''<span style="color: #%s;">%s</span>'''
return fmt % (self.cor(), self.prioridade)
rotulo.allow_tags = True
rotulo.short_description = u'rótulo'
rotulo.admin_order_field = 'prioridade'
class Pedido(models.Model):
inclusao = models.DateTimeField(auto_now_add=True)
cliente = models.ForeignKey(Cliente)
entregador = models.ForeignKey('Entregador', null=True, blank=True)
partida = models.TimeField(null=True, blank=True)
class Meta:
ordering = ['-inclusao']
def despachado(self):
return (self.entregador is not None) and (self.partida is not None)
despachado.boolean = True