10 changed files with 198 additions and 23 deletions
-
24apps/hadis/docs.py
-
71apps/hadis/management/commands/generate_transmit_slug.py
-
19apps/hadis/migrations/0046_transmitters_slug.py
-
16apps/hadis/migrations/0047_remove_transmitters_slug.py
-
19apps/hadis/migrations/0048_transmitters_slug.py
-
19apps/hadis/migrations/0049_alter_transmitters_slug.py
-
12apps/hadis/models/transmitter.py
-
2apps/hadis/serializers/hadis.py
-
6apps/hadis/urls.py
-
33apps/hadis/views/transmitter.py
@ -0,0 +1,71 @@ |
|||
# 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") |
|||
@ -0,0 +1,19 @@ |
|||
# Generated by Django 5.2.9 on 2025-12-17 13:25 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
dependencies = [ |
|||
("hadis", "0045_bookreference_publisher"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name="transmitters", |
|||
name="slug", |
|||
field=models.SlugField( |
|||
blank=True, max_length=255, unique=True, verbose_name="slug" |
|||
), |
|||
), |
|||
] |
|||
@ -0,0 +1,16 @@ |
|||
# Generated by Django 5.2.9 on 2025-12-17 13:26 |
|||
|
|||
from django.db import migrations |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
dependencies = [ |
|||
("hadis", "0046_transmitters_slug"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.RemoveField( |
|||
model_name="transmitters", |
|||
name="slug", |
|||
), |
|||
] |
|||
@ -0,0 +1,19 @@ |
|||
# Generated by Django 5.2.9 on 2025-12-17 13:26 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
dependencies = [ |
|||
("hadis", "0047_remove_transmitters_slug"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name="transmitters", |
|||
name="slug", |
|||
field=models.SlugField( |
|||
blank=True, max_length=255, null=True, verbose_name="slug" |
|||
), |
|||
), |
|||
] |
|||
@ -0,0 +1,19 @@ |
|||
# Generated by Django 5.2.9 on 2025-12-17 13:34 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
dependencies = [ |
|||
("hadis", "0048_transmitters_slug"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name="transmitters", |
|||
name="slug", |
|||
field=models.SlugField( |
|||
blank=True, max_length=255, unique=True, verbose_name="slug" |
|||
), |
|||
), |
|||
] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue