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.
47 lines
1.8 KiB
47 lines
1.8 KiB
# backend/apps/hadis/management/commands/seed_opinion_scholars.py
|
|
|
|
import random
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import transaction
|
|
from apps.hadis.models import TransmitterOpinion, BookAuthor
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Randomly assigns BookAuthors to existing TransmitterOpinions as scholars.'
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write(self.style.WARNING("Starting to link opinions to random scholars..."))
|
|
|
|
# دریافت تمام رکوردها
|
|
opinions = list(TransmitterOpinion.objects.all())
|
|
authors = list(BookAuthor.objects.all())
|
|
|
|
if not opinions:
|
|
self.stdout.write(self.style.ERROR("No TransmitterOpinions found in the database."))
|
|
return
|
|
|
|
if not authors:
|
|
self.stdout.write(self.style.ERROR("No BookAuthors found. Please add some authors first."))
|
|
return
|
|
|
|
opinions_to_update = []
|
|
|
|
# تخصیص رندوم نویسندهها به نظرات
|
|
for opinion in opinions:
|
|
random_scholar = random.choice(authors)
|
|
opinion.scholar = random_scholar
|
|
opinions_to_update.append(opinion)
|
|
|
|
# آپدیت گروهی (Bulk Update) برای پرفورمنس بالا
|
|
with transaction.atomic():
|
|
batch_size = 1000
|
|
for i in range(0, len(opinions_to_update), batch_size):
|
|
TransmitterOpinion.objects.bulk_update(
|
|
opinions_to_update[i:i + batch_size],
|
|
['scholar'] # فقط فیلد scholar آپدیت میشود
|
|
)
|
|
|
|
self.stdout.write(
|
|
self.style.SUCCESS(
|
|
f"\n🎉 Successfully linked {len(opinions_to_update)} TransmitterOpinions to random BookAuthors (Scholars)!"
|
|
)
|
|
)
|