from django.core.management.base import BaseCommand from django.db.models import Count from api.customs.models import Pedimento, Cove, EDocument, Partida from api.record.models import Document class Command(BaseCommand): help = 'Elimina pedimentos duplicados dejando el que tiene más documentos, coves, edocs y partidas.' def handle(self, *args, **options): duplicados = ( Pedimento.objects .values('pedimento_app') .annotate(total=Count('id')) .filter(total__gt=1) ) for dup in duplicados: pedimentos = ( Pedimento.objects .filter(pedimento_app=dup['pedimento_app']) .annotate( num_docs=Count('documents'), num_coves=Count('coves'), num_edocs=Count('documentos'), num_partidas=Count('partidas') ) .order_by('-num_docs', '-num_coves', '-num_edocs', '-num_partidas') ) # Mantener el primero, eliminar los demás to_delete = pedimentos[1:] for ped in to_delete: self.stdout.write(f'Eliminando pedimento {ped.id} ({ped.pedimento_app})') Cove.objects.filter(pedimento=ped).delete() EDocument.objects.filter(pedimento=ped).delete() Partida.objects.filter(pedimento=ped).delete() Document.objects.filter(pedimento=ped).delete() ped.delete() self.stdout.write(self.style.SUCCESS('Eliminación de duplicados completada.'))