# Create this file: yourapp/management/commands/generate_transmitter_slugs.py from django.core.management.base import BaseCommand from django.utils.text import slugify from apps.hadis.models import Transmitters # adjust import path as needed class Command(BaseCommand): help = 'Generate unique slugs for all transmitters' def add_arguments(self, parser): parser.add_argument( '--regenerate', action='store_true', help='Regenerate slugs even if they already exist', ) def handle(self, *args, **options): regenerate = options['regenerate'] transmitters = Transmitters.objects.all() updated_count = 0 skipped_count = 0 self.stdout.write( self.style.SUCCESS(f'\nšŸ“ Processing {transmitters.count()} transmitters...\n') ) for transmitter in transmitters: # Skip if slug exists and regenerate is False if transmitter.slug and not regenerate: self.stdout.write( self.style.WARNING(f"⊘ Skipped: {transmitter.full_name} (slug exists)") ) skipped_count += 1 continue # Generate base slug from full_name base_slug = slugify(transmitter.full_name, allow_unicode=True) if not base_slug: self.stdout.write( self.style.ERROR(f"āœ— Error: {transmitter.full_name} - Cannot generate slug from empty name") ) continue # Ensure uniqueness slug = base_slug counter = 1 while Transmitters.objects.filter(slug=slug).exclude(pk=transmitter.pk).exists(): slug = f"{base_slug}-{counter}" counter += 1 # Update the transmitter transmitter.slug = slug transmitter.save() updated_count += 1 self.stdout.write( self.style.SUCCESS(f"āœ“ Generated: {transmitter.full_name} → {slug}") ) # Print summary self.stdout.write("\n" + "="*70) self.stdout.write(self.style.SUCCESS("SLUG GENERATION SUMMARY")) self.stdout.write("="*70) self.stdout.write(f"āœ“ Generated: {updated_count}") self.stdout.write(f"⊘ Skipped: {skipped_count}") self.stdout.write(f"šŸ“Š Total: {transmitters.count()}") self.stdout.write("="*70 + "\n")