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.
129 lines
5.9 KiB
129 lines
5.9 KiB
import random
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import transaction
|
|
# REPLACE 'apps.hadis.models' with your actual app path
|
|
from apps.hadis.models import Hadis
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Updates explanation and address fields with structured multilingual dummy data'
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write("Starting bulk update of Explanation and Address fields...")
|
|
|
|
hadis_qs = Hadis.objects.all()
|
|
total_hadis = hadis_qs.count()
|
|
|
|
if total_hadis == 0:
|
|
self.stdout.write(self.style.WARNING("No Hadis found to update."))
|
|
return
|
|
|
|
self.stdout.write(f"Found {total_hadis} Hadis records.")
|
|
|
|
# --- DATA POOLS FOR RANDOM VARIATION ---
|
|
|
|
# 1. Address Data (Hierarchical strings: Book -> Chapter -> Section)
|
|
address_pool = [
|
|
{
|
|
"en": ["Sahih al-Bukhari", "Book of Revelation", "Chapter 1"],
|
|
"fa": ["صحیح بخاری", "کتاب وحی", "باب ۱"],
|
|
"ru": ["Сахих аль-Бухари", "Книга откровения", "Глава 1"]
|
|
},
|
|
{
|
|
"en": ["Riyad as-Salihin", "The Book of Knowledge", "Virtues of Seeking Knowledge"],
|
|
"fa": ["ریاض الصالحین", "کتاب علم", "فضیلت طلب علم"],
|
|
"ru": ["Рияд ас-Салихин", "Книга знаний", "Достоинства поиска знаний"]
|
|
},
|
|
{
|
|
"en": ["Sunan Abi Dawud", "Book of Prayer", "Details of Prostration"],
|
|
"fa": ["سنن ابی داوود", "کتاب صلاه", "جزئیات سجده"],
|
|
"ru": ["Сунан Абу Дауд", "Книга молитвы", "Детали земного поклона"]
|
|
}
|
|
]
|
|
|
|
# 2. Explanation Data (Title/Detail objects)
|
|
explanation_pool = [
|
|
{
|
|
"en": [
|
|
{"title": "Vocabulary", "detail": "The term 'Niyyah' implies the resolve of the heart."},
|
|
{"title": "Context", "detail": "Narrated by Omar bin Al-Khattab regarding migration to Medina."}
|
|
],
|
|
"fa": [
|
|
{"title": "لغات", "detail": "واژه «نیت» به معنای قصد و عزم قلبی است."},
|
|
{"title": "شأن نزول", "detail": "این حدیث از عمر بن خطاب در مورد مهاجرت به مدینه روایت شده است."}
|
|
],
|
|
"ru": [
|
|
{"title": "Словарь", "detail": "Термин «Ният» подразумевает решимость сердца."},
|
|
{"title": "Контекст", "detail": "Передано Омаром ибн аль-Хаттабом относительно переселения в Медину."}
|
|
]
|
|
},
|
|
{
|
|
"en": [
|
|
{"title": "Legal Ruling", "detail": "Scholars agree that this action is Mustahabb (recommended)."},
|
|
{"title": "Benefits", "detail": "Increases spirituality and mindfulness in daily life."}
|
|
],
|
|
"fa": [
|
|
{"title": "حکم فقهی", "detail": "علما اتفاق نظر دارند که این عمل مستحب است."},
|
|
{"title": "فواید", "detail": "باعث افزایش معنویت و توجه در زندگی روزمره میشود."}
|
|
],
|
|
"ru": [
|
|
{"title": "Правoвое решение", "detail": "Ученые согласны, что это действие является желательным (мустахаб)."},
|
|
{"title": "Польза", "detail": "Повышает духовность и осознанность в повседневной жизни."}
|
|
]
|
|
}
|
|
]
|
|
|
|
updated_count = 0
|
|
|
|
# Iterate and Update
|
|
for i, hadis in enumerate(hadis_qs, 1):
|
|
if i % 100 == 0:
|
|
self.stdout.write(f"Processing {i}/{total_hadis}...")
|
|
|
|
# Pick random samples to make data look diverse
|
|
addr_sample = random.choice(address_pool)
|
|
exp_sample = random.choice(explanation_pool)
|
|
|
|
# --- CONSTRUCT ADDRESS FORMAT (List of Strings) ---
|
|
# Format: [{"language_code": "en", "text": ["A", "B"]}, ...]
|
|
new_address = [
|
|
{
|
|
"language_code": "en",
|
|
"text": addr_sample["en"]
|
|
},
|
|
{
|
|
"language_code": "fa",
|
|
"text": addr_sample["fa"]
|
|
},
|
|
{
|
|
"language_code": "ru",
|
|
"text": addr_sample["ru"]
|
|
}
|
|
]
|
|
|
|
# --- CONSTRUCT EXPLANATION FORMAT (List of Objects) ---
|
|
# Format: [{"language_code": "en", "text": [{"title":.., "detail":..}]}, ...]
|
|
new_explanation = [
|
|
{
|
|
"language_code": "en",
|
|
"text": exp_sample["en"]
|
|
},
|
|
{
|
|
"language_code": "fa",
|
|
"text": exp_sample["fa"]
|
|
},
|
|
{
|
|
"language_code": "ru",
|
|
"text": exp_sample["ru"]
|
|
}
|
|
]
|
|
|
|
# Assign to fields
|
|
hadis.address = new_address
|
|
hadis.explanation = new_explanation
|
|
|
|
# Save (Using save() ensures signals/dates update, though slower than bulk_update)
|
|
# Since we modify JSON fields, simple save is safest.
|
|
hadis.save()
|
|
updated_count += 1
|
|
|
|
self.stdout.write(self.style.SUCCESS(f"Successfully updated {updated_count} Hadis records with new format."))
|