import random from django.core.management.base import BaseCommand from django.db import transaction from apps.hadis.models import Hadis class Command(BaseCommand): help = 'Populates missing English context for Hadith fields: title, title_narrator, translation, and description.' def handle(self, *args, **options): # Sample Islamic content for relevant test data titles = [ "On the Virtues of Patience", "The Importance of Intentions", "Kindness to Parents", "The Merit of Seeking Knowledge", "Excellence of Character", "On Truthfulness", "The Value of Time" ] narrators = [ "Abu Huraira", "Aisha", "Anas bin Malik", "Ibn Umar", "Jabir bin Abdullah" ] translations = [ "Actions are but by intentions, and every man shall have only that which he intended.", "The best among you are those who have the best manners and character.", "A Muslim is the one from whose tongue and hands the Muslims are safe.", "None of you will have faith till he wishes for his brother what he likes for himself.", "The most beloved of deeds to Allah are those that are most consistent, even if they are small." ] descriptions = [ "This hadith emphasizes the spiritual foundation of all outward actions.", "A core teaching regarding social ethics and communal harmony in Islam.", "Explains the internal discipline required for a believer's growth.", "Provides guidance on how to treat neighbors and family members.", "Focuses on the relationship between the Creator and the creation." ] hadis_qs = Hadis.objects.all() total = hadis_qs.count() updated_count = 0 self.stdout.write(self.style.WARNING(f'Starting update for {total} Hadiths...')) with transaction.atomic(): for hadis in hadis_qs: modified = False # Define the target fields field_map = { 'title': titles, 'title_narrator': narrators, 'translation': translations, 'description': descriptions } for field_name, sample_list in field_map.items(): current_data = getattr(hadis, field_name) # Ensure current_data is a list (JSONField default) if not isinstance(current_data, list): current_data = [] # Check if English context already exists has_en = any(item.get('language_code') == 'en' for item in current_data if isinstance(item, dict)) if not has_en: # Append the new English entry new_entry = { "text": random.choice(sample_list), "language_code": "en" } current_data.append(new_entry) setattr(hadis, field_name, current_data) modified = True if modified: hadis.save() updated_count += 1 self.stdout.write(self.style.SUCCESS(f'Successfully updated {updated_count} Hadiths with English content.'))