feat: várias melhorias e evoluções no projeto
This commit is contained in:
149
diarios/admin.py
149
diarios/admin.py
@ -1,13 +1,150 @@
|
||||
from django.contrib import admin
|
||||
from django.db import models
|
||||
from django.utils.html import format_html
|
||||
from django.urls import reverse
|
||||
from django.utils.safestring import mark_safe
|
||||
from .models import TipoDiarioOficial, DiarioOficial, PageDiarioOficial
|
||||
from .forms import PageDiarioOficialInlineForm
|
||||
|
||||
from .models import DiarioOficial, TipoDiarioOficial
|
||||
|
||||
@admin.register(TipoDiarioOficial)
|
||||
class TipoDiarioOficialAdmin(admin.ModelAdmin):
|
||||
list_display = ("nome", "quantidade_diarios")
|
||||
search_fields = ("nome",)
|
||||
ordering = ("nome",)
|
||||
|
||||
def quantidade_diarios(self, obj):
|
||||
return obj.diarios.count()
|
||||
|
||||
quantidade_diarios.short_description = "Nº de Diários"
|
||||
|
||||
|
||||
class PageDiarioOficialInline(admin.TabularInline):
|
||||
form = PageDiarioOficialInlineForm
|
||||
model = PageDiarioOficial
|
||||
extra = 0
|
||||
fields = ("id", "numero", "conteudo")
|
||||
can_delete = False
|
||||
|
||||
def numero_link(self, instance):
|
||||
if instance.id:
|
||||
url = reverse("admin:diarios_pagediariooficial_change", args=[instance.id])
|
||||
return mark_safe(f'<a href="{url}">{instance.numero}</a>')
|
||||
return instance.numero
|
||||
|
||||
def conteudo_resumido(self, instance):
|
||||
return (
|
||||
(instance.conteudo[:100] + "...")
|
||||
if len(instance.conteudo) > 100
|
||||
else instance.conteudo
|
||||
)
|
||||
|
||||
conteudo_resumido.short_description = "Conteúdo (resumo)"
|
||||
|
||||
|
||||
@admin.register(DiarioOficial)
|
||||
class DiarioOficialAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
list_display = (
|
||||
"numero",
|
||||
"tipo_nome",
|
||||
"data_formatada_admin",
|
||||
"arquivo_link",
|
||||
"link_externo",
|
||||
"paginas_count",
|
||||
)
|
||||
list_filter = ("tipo", "data")
|
||||
search_fields = ("numero", "tipo__nome", "data")
|
||||
date_hierarchy = "data"
|
||||
ordering = ("-data", "-numero")
|
||||
readonly_fields = (
|
||||
"data_formatada_admin",
|
||||
"arquivo_preview",
|
||||
"paginas_count",
|
||||
"link_externo",
|
||||
)
|
||||
fieldsets = (
|
||||
(
|
||||
"Informações Básicas",
|
||||
{"fields": ("numero", "tipo", "data", "data_formatada_admin")},
|
||||
),
|
||||
(
|
||||
"Arquivos e Links",
|
||||
{"fields": ("arquivo", "arquivo_preview", "link", "link_externo")},
|
||||
),
|
||||
("Estatísticas", {"fields": ("paginas_count",), "classes": ("collapse",)}),
|
||||
)
|
||||
# inlines = (PageDiarioOficialInline,)
|
||||
|
||||
@admin.register(TipoDiarioOficial)
|
||||
class TipoDiarioOficialAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
def tipo_nome(self, obj):
|
||||
return obj.tipo.nome if obj.tipo else "-"
|
||||
|
||||
tipo_nome.short_description = "Tipo"
|
||||
tipo_nome.admin_order_field = "tipo__nome"
|
||||
|
||||
def data_formatada_admin(self, obj):
|
||||
return obj.data_formatada
|
||||
|
||||
data_formatada_admin.short_description = "Data"
|
||||
|
||||
def arquivo_link(self, obj):
|
||||
if obj.arquivo:
|
||||
return mark_safe(
|
||||
f'<a href="{obj.arquivo.url}" target="_blank">Download PDF</a>'
|
||||
)
|
||||
return "-"
|
||||
|
||||
arquivo_link.short_description = "Arquivo"
|
||||
arquivo_link.allow_tags = True
|
||||
|
||||
def link_externo(self, obj):
|
||||
if obj.link:
|
||||
return mark_safe(f'<a href="{obj.link}" target="_blank">Acessar Online</a>')
|
||||
return "-"
|
||||
|
||||
link_externo.short_description = "Link Externo"
|
||||
link_externo.allow_tags = True
|
||||
|
||||
def arquivo_preview(self, obj):
|
||||
if obj.arquivo:
|
||||
return mark_safe(
|
||||
f'<a href="{obj.arquivo.url}" target="_blank">Visualizar PDF</a>'
|
||||
)
|
||||
return "-"
|
||||
|
||||
arquivo_preview.short_description = "Pré-visualização"
|
||||
arquivo_preview.allow_tags = True
|
||||
|
||||
def paginas_count(self, obj):
|
||||
return obj.paginas.count()
|
||||
|
||||
paginas_count.short_description = "Nº de Páginas"
|
||||
|
||||
def get_queryset(self, request):
|
||||
return super().get_queryset(request).prefetch_related("paginas")
|
||||
|
||||
|
||||
@admin.register(PageDiarioOficial)
|
||||
class PageDiarioOficialAdmin(admin.ModelAdmin):
|
||||
autocomplete_fields = ("diario",)
|
||||
list_display = ("id", "diario_link", "numero", "conteudo_resumido")
|
||||
list_display_links = ('id', 'numero')
|
||||
list_filter = ("diario__tipo", "diario__data", "layout_duas_colunas")
|
||||
search_fields = ("conteudo", "diario__numero")
|
||||
readonly_fields = (
|
||||
"diario_link",
|
||||
)
|
||||
|
||||
|
||||
def diario_link(self, obj):
|
||||
url = reverse("admin:diarios_diariooficial_change", args=[obj.diario.id])
|
||||
return mark_safe(f'<a href="{url}">{obj.diario}</a>')
|
||||
|
||||
diario_link.short_description = "Diário Oficial"
|
||||
diario_link.allow_tags = True
|
||||
|
||||
def conteudo_resumido(self, obj):
|
||||
return (obj.conteudo[:100] + "...") if len(obj.conteudo) > 100 else obj.conteudo
|
||||
|
||||
conteudo_resumido.short_description = "Conteúdo"
|
||||
|
||||
def get_queryset(self, request):
|
||||
return super().get_queryset(request).select_related("diario")
|
||||
|
||||
Reference in New Issue
Block a user