# backend/apps/hadis/management/commands/generate_author_slugs.py from django.core.management.base import BaseCommand from apps.hadis.models.reference import BookAuthor class Command(BaseCommand): help = 'Generates missing slugs for BookAuthor records.' def add_arguments(self, parser): # اضافه کردن یک قابلیت اختیاری برای ساخت مجدد تمام اسلاگ‌ها parser.add_argument( '--all', action='store_true', help='Regenerate slugs for ALL authors, even if they already have one.', ) def handle(self, *args, **options): regenerate_all = options['all'] if regenerate_all: # گرفتن همه نویسنده‌ها authors = BookAuthor.objects.all() self.stdout.write(self.style.WARNING(f"Regenerating slugs for ALL {authors.count()} authors...")) else: # گرفتن نویسنده‌هایی که اسلاگ ندارند یا اسلاگشان خالی است authors = BookAuthor.objects.filter(slug__isnull=True) | BookAuthor.objects.filter(slug='') self.stdout.write(self.style.WARNING(f"Generating slugs for {authors.count()} authors without a slug...")) if not authors.exists(): self.stdout.write(self.style.SUCCESS("All authors already have slugs. Nothing to do!")) return updated_count = 0 for author in authors: if regenerate_all: author.slug = '' # خالی کردن اسلاگ تا متد save مجبور به ساخت مجدد شود # صدا زدن متد save باعث می‌شود منطق اسلاگ‌سازِ داخل مدل شما به صورت خودکار اجرا شود author.save() updated_count += 1 # چاپ لاگ پیشرفت برای هر 100 رکورد if updated_count % 100 == 0: self.stdout.write(f"Processed {updated_count} authors...") self.stdout.write( self.style.SUCCESS( f"\n🎉 Successfully generated/updated slugs for {updated_count} BookAuthors!" ) )