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.
133 lines
10 KiB
133 lines
10 KiB
import random
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import transaction
|
|
# REPLACE 'apps.hadis.models' with your actual app path if different
|
|
from apps.hadis.models import Transmitters, TransmitterReliability
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Seeds database with 50 famous Islamic transmitters and scholars'
|
|
|
|
def create_json_field(self, en_text, fa_text, ru_text):
|
|
"""Helper to create the standard JSON structure"""
|
|
return [
|
|
{"text": en_text, "language_code": "en"},
|
|
{"text": fa_text, "language_code": "fa"},
|
|
{"text": ru_text, "language_code": "ru"}
|
|
]
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write("Starting to seed transmitters...")
|
|
|
|
# 1. Fetch available reliability IDs (7-17)
|
|
# We assume these exist based on your prompt.
|
|
reliability_ids = list(range(7, 18))
|
|
|
|
# Verify reliabilities exist, or create a fallback
|
|
existing_reliabilities = list(TransmitterReliability.objects.filter(id__in=reliability_ids))
|
|
if not existing_reliabilities:
|
|
self.stdout.write(self.style.WARNING("No TransmitterReliability found in range 7-17. Creating a default one..."))
|
|
default_rel = TransmitterReliability.objects.create(
|
|
id=7,
|
|
title=self.create_json_field("Trustworthy", "ثقه", "Надежный"),
|
|
color='green'
|
|
)
|
|
existing_reliabilities = [default_rel]
|
|
|
|
# 2. Data Definition (List of 50)
|
|
# Structure: (EN Name, FA Name, RU Name, Death Year, Origin EN, Origin FA, Origin RU)
|
|
data_source = [
|
|
("Abu Hurairah", "ابو هریره", "Абу Хурайра", 59, "Yemen", "یمن", "Йемен"),
|
|
("Anas ibn Malik", "انس بن مالک", "Анас ибн Малик", 93, "Medina", "مدینه", "Медина"),
|
|
("Aisha bint Abi Bakr", "عایشه بنت ابیبکر", "Аиша бинт Абу Бакр", 58, "Mecca", "مکه", "Мекка"),
|
|
("Abdullah ibn Umar", "عبدالله بن عمر", "Абдуллах ибн Умар", 73, "Mecca", "مکه", "Мекка"),
|
|
("Abdullah ibn Abbas", "عبدالله بن عباس", "Абдуллах ибн Аббас", 68, "Mecca", "مکه", "Мекка"),
|
|
("Jabir ibn Abdullah", "جابر بن عبدالله", "Джабир ибн Абдуллах", 78, "Medina", "مدینه", "Медина"),
|
|
("Abu Sa'id al-Khudri", "ابو سعید خدری", "Абу Саид аль-Худри", 74, "Medina", "مدینه", "Медина"),
|
|
("Abdullah ibn Mas'ud", "عبدالله بن مسعود", "Абдуллах ибн Масуд", 32, "Mecca", "مکه", "Мекка"),
|
|
("Ali ibn Abi Talib", "علی بن ابیطالب", "Али ибн Абу Талиб", 40, "Mecca", "مکه", "Мекка"),
|
|
("Umar ibn al-Khattab", "عمر بن خطاب", "Умар ибн аль-Хаттаб", 23, "Mecca", "مکه", "Мекка"),
|
|
("Abu Bakr as-Siddiq", "ابوبکر صدیق", "Абу Бакр ас-Сиддик", 13, "Mecca", "مکه", "Мекка"),
|
|
("Uthman ibn Affan", "عثمان بن عفان", "Усман ибн Аффан", 35, "Mecca", "مکه", "Мекка"),
|
|
("Salman al-Farsi", "سلمان فارسی", "Салман аль-Фариси", 36, "Isfahan", "اصفهان", "Исфахан"),
|
|
("Bilal ibn Rabah", "بلال حبشی", "Билал ибн Рабах", 20, "Mecca", "مکه", "Мекка"),
|
|
("Ammar ibn Yasir", "عمار یاسر", "Аммар ибн Ясир", 37, "Mecca", "مکه", "Мекка"),
|
|
("Abu Dharr al-Ghifari", "ابوذر غفاری", "Абу Зарр аль-Гифари", 32, "Ghifar", "غفار", "Гифар"),
|
|
("Miqdad ibn Aswad", "مقداد بن اسود", "Микдад ибн Асвад", 33, "Mecca", "مکه", "Мекка"),
|
|
("Talhah ibn Ubaydullah", "طلحه بن عبیدالله", "Талха ибн Убайдуллах", 36, "Mecca", "مکه", "Мекка"),
|
|
("Zubayr ibn al-Awam", "زبیر بن عوام", "Зубайр ибн аль-Аввам", 36, "Mecca", "مکه", "Мекка"),
|
|
("Sa'd ibn Abi Waqqas", "سعد بن ابیوقاص", "Саад ибн Абу Ваккас", 55, "Mecca", "مکه", "Мекка"),
|
|
("Saeed ibn al-Musayyib", "سعید بن مسیب", "Саид ибн аль-Мусаййиб", 94, "Medina", "مدینه", "Медина"),
|
|
("Urwah ibn al-Zubayr", "عروه بن زبیر", "Урва ибн аз-Зубайр", 94, "Medina", "مدینه", "Медина"),
|
|
("Al-Hasan al-Basri", "حسن بصری", "Аль-Хасан аль-Басри", 110, "Medina", "مدینه", "Медина"),
|
|
("Muhammad ibn Sirin", "محمد بن سیرین", "Мухаммад ибн Сирин", 110, "Basra", "بصره", "Басра"),
|
|
("Ibn Shihab al-Zuhri", "ابن شهاب زهری", "Ибн Шихаб аз-Зухри", 124, "Medina", "مدینه", "Медина"),
|
|
("Nafi Mawla Ibn Umar", "نافع مولی ابن عمر", "Нафи мавля Ибн Умар", 117, "Medina", "مدینه", "Медина"),
|
|
("Malik ibn Anas", "مالک بن انس", "Малик ибн Анас", 179, "Medina", "مدینه", "Медина"),
|
|
("Al-Shafi'i", "محمد بن ادریس شافعی", "Аш-Шафии", 204, "Gaza", "غزه", "Газа"),
|
|
("Ahmad ibn Hanbal", "احمد بن حنبل", "Ахмад ибн Ханбаль", 241, "Baghdad", "بغداد", "Багдад"),
|
|
("Sufyan al-Thawri", "سفیان ثوری", "Суфьян ас-Саури", 161, "Kufa", "کوفه", "Куфа"),
|
|
("Sufyan ibn Uyaynah", "سفیان بن عیینه", "Суфьян ибн Уйайна", 198, "Kufa", "کوفه", "Куфа"),
|
|
("Abdullah ibn al-Mubarak", "عبدالله بن مبارک", "Абдуллах ибн аль-Мубарак", 181, "Merv", "مرو", "Мерв"),
|
|
("Waki ibn al-Jarrah", "وکیع بن جراح", "Ваки ибн аль-Джаррах", 197, "Kufa", "کوفه", "Куфа"),
|
|
("Shu'bah ibn al-Hajjaj", "شعبه بن حجاج", "Шуба ибн аль-Хаджадж", 160, "Wasit", "واسط", "Васит"),
|
|
("Yahya ibn Ma'in", "یحیی بن معین", "Яхья ибн Маин", 233, "Baghdad", "بغداد", "Багдад"),
|
|
("Ali ibn al-Madini", "علی بن مدینی", "Али ибн аль-Мадини", 234, "Basra", "بصره", "Басра"),
|
|
("Muhammad al-Bukhari", "محمد بخاری", "Мухаммад аль-Бухари", 256, "Bukhara", "بخارا", "Бухара"),
|
|
("Muslim ibn al-Hajjaj", "مسلم نیشابوری", "Муслим ибн аль-Хаджадж", 261, "Nishapur", "نیشابور", "Нишапур"),
|
|
("Abu Dawood", "ابوداوود سجستانی", "Абу Дауд", 275, "Sistan", "سیستان", "Систан"),
|
|
("Al-Tirmidhi", "ترمذی", "Ат-Тирмизи", 279, "Termez", "ترمز", "Термез"),
|
|
("Al-Nasa'i", "نسائی", "Ан-Насаи", 303, "Nasa", "نسا", "Наса"),
|
|
("Ibn Majah", "ابن ماجه", "Ибн Маджа", 273, "Qazvin", "قزوین", "Казвин"),
|
|
("Al-Daraqutni", "دارقطنی", "Ад-Даракутни", 385, "Baghdad", "بغداد", "Багдад"),
|
|
("Al-Bayhaqi", "بیهقی", "Аль-Байхаки", 458, "Bayhaq", "بیهق", "Байхак"),
|
|
("Al-Hakim al-Nishapuri", "حاکم نیشابوری", "Аль-Хаким ан-Нишапури", 405, "Nishapur", "نیشابور", "Нишапур"),
|
|
("Al-Nawawi", "نووی", "Ан-Навави", 676, "Nawa", "نوا", "Нава"),
|
|
("Al-Dhahabi", "ذهبی", "Аз-Захаби", 748, "Damascus", "دمشق", "Дамаск"),
|
|
("Ibn Hajar al-Asqalani", "ابن حجر عسقلانی", "Ибн Хаджар аль-Аскаляни", 852, "Cairo", "قاهره", "Каир"),
|
|
("Ibn Kathir", "ابن کثیر", "Ибн Касир", 774, "Damascus", "دمشق", "Дамаск"),
|
|
("Al-Tabari", "طبری", "Ат-Табари", 310, "Amol", "آمل", "Амоль"),
|
|
]
|
|
|
|
# 3. Execution Loop
|
|
created_count = 0
|
|
with transaction.atomic():
|
|
for entry in data_source:
|
|
en_name, fa_name, ru_name, death_year, en_origin, fa_origin, ru_origin = entry
|
|
|
|
# Check if exists (by English Name) to allow re-running script
|
|
if Transmitters.objects.filter(full_name__contains=[{"text": en_name, "language_code": "en"}]).exists():
|
|
self.stdout.write(f"Skipping {en_name} (already exists)")
|
|
continue
|
|
|
|
# Prepare JSON fields
|
|
full_name_json = self.create_json_field(en_name, fa_name, ru_name)
|
|
origin_json = self.create_json_field(en_origin, fa_origin, ru_origin)
|
|
|
|
# Simple defaults for other text fields
|
|
desc_json = self.create_json_field(
|
|
f"A renowned scholar/narrator from {en_origin}",
|
|
f"از راویان/علمای مشهور اهل {fa_origin}",
|
|
f"Известный передатчик/ученый из {ru_origin}"
|
|
)
|
|
|
|
# Randomly pick reliability
|
|
reliability = random.choice(existing_reliabilities)
|
|
|
|
# Create Object
|
|
Transmitters.objects.create(
|
|
full_name=full_name_json,
|
|
origin=origin_json,
|
|
lived_in=origin_json, # Assume lived where born for simplicity
|
|
died_in=self.create_json_field("Unknown", "نامشخص", "Неизвестно"),
|
|
death_year_hijri=death_year,
|
|
description=desc_json,
|
|
reliability=reliability,
|
|
# Setting defaults for required JSON fields
|
|
kunya=self.create_json_field("", "", ""),
|
|
known_as=self.create_json_field("", "", ""),
|
|
nickname=self.create_json_field("", "", ""),
|
|
madhhab='unknown', # Default as per your choices
|
|
)
|
|
created_count += 1
|
|
|
|
self.stdout.write(self.style.SUCCESS(f"Successfully created {created_count} new Transmitters!"))
|