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.
128 lines
5.7 KiB
128 lines
5.7 KiB
import random
|
|
from django.core.management.base import BaseCommand
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
# Ensure these imports match your actual app structure
|
|
from apps.hadis.models import (
|
|
Hadis,
|
|
HadisCollection,
|
|
HadisInCollection,
|
|
HadisCorrection
|
|
)
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Seeds Hadis Collections and Corrections for Hadis IDs 1877-1888'
|
|
|
|
def create_json_field(self, en_text, fa_text, ru_text):
|
|
"""Helper to create your specific JSON format with Russian added"""
|
|
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 Hadis Extras Seeding ---")
|
|
|
|
# ---------------------------------------------------------
|
|
# 1. Create Hadis Collections
|
|
# ---------------------------------------------------------
|
|
self.stdout.write("Creating Hadis Collections...")
|
|
|
|
collections_data = [
|
|
{
|
|
"title": ("The Book of Intellect and Ignorance", "کتاب عقل و جهل", "Книга разума и невежества"),
|
|
"summary": (
|
|
"A collection of narrations regarding the importance of reason.",
|
|
"مجموعهای از روایات درباره اهمیت عقل و خرد.",
|
|
"Сборник преданий о важности разума."
|
|
)
|
|
},
|
|
{
|
|
"title": ("The Book of Monotheism", "کتاب التوحید", "Книга Единобожия"),
|
|
"summary": (
|
|
"Hadiths explaining the oneness of God.",
|
|
"احادیثی که یگانگی خداوند را توضیح میدهند.",
|
|
"Хадисы, объясняющие единство Бога."
|
|
)
|
|
}
|
|
]
|
|
|
|
created_collections = []
|
|
for c_data in collections_data:
|
|
# We use the English title as a loose identifier to prevent duplicates
|
|
slug_base = c_data["title"][0].lower().replace(" ", "-")
|
|
|
|
# Simple check if exists to avoid duplication in multiple runs
|
|
if HadisCollection.objects.filter(slug__startswith=slug_base).exists():
|
|
collection = HadisCollection.objects.filter(slug__startswith=slug_base).first()
|
|
self.stdout.write(f"Collection '{c_data['title'][0]}' already exists.")
|
|
else:
|
|
collection = HadisCollection.objects.create(
|
|
title=self.create_json_field(*c_data["title"]),
|
|
summary=self.create_json_field(*c_data["summary"]),
|
|
status=True
|
|
)
|
|
self.stdout.write(self.style.SUCCESS(f"Created Collection: {c_data['title'][0]}"))
|
|
|
|
created_collections.append(collection)
|
|
|
|
# ---------------------------------------------------------
|
|
# 2. Process Hadis (1877 - 1888)
|
|
# ---------------------------------------------------------
|
|
self.stdout.write("Processing Hadis IDs 1877-1888...")
|
|
|
|
target_ids = range(1877, 1889)
|
|
|
|
for hadis_id in target_ids:
|
|
try:
|
|
hadis_obj = Hadis.objects.get(id=hadis_id)
|
|
except ObjectDoesNotExist:
|
|
self.stdout.write(self.style.WARNING(f"Hadis ID {hadis_id} not found. Skipping."))
|
|
continue
|
|
|
|
# --- A. Add to Collection ---
|
|
# Clear previous collection links for this hadis to avoid clutter
|
|
HadisInCollection.objects.filter(hadis=hadis_obj).delete()
|
|
|
|
# Assign to a random collection from our list
|
|
target_collection = random.choice(created_collections)
|
|
|
|
HadisInCollection.objects.create(
|
|
hadis=hadis_obj,
|
|
collection=target_collection,
|
|
order=hadis_id # Just using ID as order for simplicity
|
|
)
|
|
self.stdout.write(f" -> Linked Hadis {hadis_id} to '{target_collection}'")
|
|
|
|
# --- B. Create Correction ---
|
|
# Mocking a correction entry
|
|
# We'll assume these are translation corrections or scholarly notes
|
|
|
|
correction_title = (
|
|
f"Correction for Hadis {hadis_id}",
|
|
f"اصلاحیه برای حدیث {hadis_id}",
|
|
f"Исправление для хадиса {hadis_id}"
|
|
)
|
|
|
|
correction_desc = (
|
|
"The word 'Wali' here implies authority, not just friendship.",
|
|
"کلمه «ولی» در اینجا دلالت بر ولایت دارد، نه صرفاً دوستی.",
|
|
"Слово «Вали» здесь означает власть, а не просто дружбу."
|
|
)
|
|
|
|
correction_trans = (
|
|
"Verily, I am the authority over the believers...",
|
|
"همانا من ولی و سرپرست مؤمنان هستم...",
|
|
"Воистину, я — покровитель верующих..."
|
|
)
|
|
|
|
HadisCorrection.objects.create(
|
|
hadis=hadis_obj,
|
|
title=self.create_json_field(*correction_title),
|
|
description=self.create_json_field(*correction_desc),
|
|
translation=self.create_json_field(*correction_trans),
|
|
share_link=f"https://example.com/corrections/{hadis_id}"
|
|
)
|
|
self.stdout.write(f" -> Created Correction for Hadis {hadis_id}")
|
|
|
|
self.stdout.write(self.style.SUCCESS("--- Hadis Extras Seeding Complete ---"))
|