Files
pagasis/backend/events/admin.py
T
2025-10-15 23:45:32 -06:00

67 lines
2.5 KiB
Python

from django.contrib import admin
from django.utils.html import format_html
from import_export import resources
from import_export.admin import ImportExportModelAdmin
from .models import Event
class EventResource(resources.ModelResource):
"""Recurso para importar/exportar eventos"""
class Meta:
model = Event
fields = ('title', 'speaker', 'date', 'start_time', 'end_time', 'event_type',
'modality', 'location', 'description', 'is_active')
import_id_fields = ['title', 'date', 'start_time']
skip_unchanged = True
report_skipped = True
def before_import_row(self, row, **kwargs):
"""Limpiar datos antes de importar"""
row['title'] = str(row.get('title', '')).strip()
row['speaker'] = str(row.get('speaker', '')).strip()
row['location'] = str(row.get('location', '')).strip()
@admin.register(Event)
class EventAdmin(ImportExportModelAdmin):
resource_class = EventResource
list_display = ['title', 'speaker', 'date', 'start_time', 'modality', 'location', 'is_active']
list_filter = ['event_type', 'modality', 'date', 'is_active']
search_fields = ['title', 'speaker', 'location']
date_hierarchy = 'date'
ordering = ['date', 'start_time']
readonly_fields = ['created_at']
actions = ['export_selected_events']
def get_import_formats(self):
"""Formatos permitidos para importar"""
from import_export.formats.base_formats import XLSX, CSV
return [XLSX, CSV]
def get_export_formats(self):
"""Formatos permitidos para exportar"""
from import_export.formats.base_formats import XLSX, CSV
return [XLSX, CSV]
def export_selected_events(self, request, queryset):
"""Acción para exportar eventos seleccionados"""
from django.http import HttpResponse
resource = EventResource()
dataset = resource.export(queryset)
from import_export.formats.base_formats import XLSX
xlsx_format = XLSX()
export_data = xlsx_format.export_data(dataset)
response = HttpResponse(
export_data,
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
response['Content-Disposition'] = 'attachment; filename="eventos.xlsx"'
self.message_user(request, f'Se exportaron {queryset.count()} eventos.')
return response
export_selected_events.short_description = "📊 Exportar eventos seleccionados"