You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

71 lines
2.5 KiB

# 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")