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