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.
81 lines
3.3 KiB
81 lines
3.3 KiB
# backend/apps/hadis/management/commands/seed_edition_researchers.py
|
|
|
|
import random
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import transaction
|
|
from django.utils.text import slugify
|
|
from apps.hadis.models import BookEdition, BookAuthor, BookResearcher
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Assigns two researchers to each BookEdition: one random text-only, one linked to a random existing BookAuthor.'
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write(self.style.WARNING("Starting to seed edition researchers..."))
|
|
|
|
editions = list(BookEdition.objects.all())
|
|
authors = list(BookAuthor.objects.all())
|
|
|
|
if not editions:
|
|
self.stdout.write(self.style.ERROR("No BookEditions found in the database."))
|
|
return
|
|
|
|
if not authors:
|
|
self.stdout.write(self.style.ERROR("No BookAuthors found. Please add some authors first."))
|
|
return
|
|
|
|
# 1. Clean existing researchers
|
|
self.stdout.write("Deleting existing BookResearchers...")
|
|
BookResearcher.objects.all().delete()
|
|
|
|
random_researcher_names = [
|
|
{"fa": "دکتر سید علی موسوی", "en": "Dr. Seyed Ali Mousavi"},
|
|
{"fa": "استاد محمد کریمی", "en": "Professor Mohammad Karimi"},
|
|
{"fa": "دکتر رضا علوی", "en": "Dr. Reza Alavi"},
|
|
{"fa": "پژوهشگر حمید احمدی", "en": "Researcher Hamid Ahmadi"},
|
|
{"fa": "دکتر مریم رضایی", "en": "Dr. Maryam Rezaei"},
|
|
{"fa": "استاد فاطمه حسینی", "en": "Professor Fatemeh Hosseini"},
|
|
{"fa": "دکتر جعفر صادقی", "en": "Dr. Jafar Sadeghi"},
|
|
]
|
|
|
|
text_only_count = 0
|
|
linked_author_count = 0
|
|
|
|
with transaction.atomic():
|
|
for edition in editions:
|
|
# 1. First researcher: Text-only (Random Name & Slug)
|
|
name_data = random.choice(random_researcher_names)
|
|
name_field = [
|
|
{"language_code": "fa", "text": name_data["fa"]},
|
|
{"language_code": "en", "text": name_data["en"]},
|
|
]
|
|
# Ensure clean slug
|
|
base_slug = slugify(name_data["en"])
|
|
slug_val = base_slug
|
|
counter = 1
|
|
while BookResearcher.objects.filter(slug=slug_val).exists():
|
|
slug_val = f"{base_slug}-{counter}"
|
|
counter += 1
|
|
|
|
BookResearcher.objects.create(
|
|
book_edition=edition,
|
|
name=name_field,
|
|
slug=slug_val,
|
|
author=None
|
|
)
|
|
text_only_count += 1
|
|
|
|
# 2. Second researcher: Linked to a random BookAuthor
|
|
random_author = random.choice(authors)
|
|
BookResearcher.objects.create(
|
|
book_edition=edition,
|
|
author=random_author
|
|
)
|
|
linked_author_count += 1
|
|
|
|
self.stdout.write(
|
|
self.style.SUCCESS(
|
|
f"Successfully seeded researchers for {len(editions)} BookEditions!\n"
|
|
f"- Created {text_only_count} text-only researchers.\n"
|
|
f"- Created {linked_author_count} researchers linked to existing authors."
|
|
)
|
|
)
|