from django.core.management.base import BaseCommand from django.db import transaction from apps.hadis.models import Transmitters class Command(BaseCommand): help = 'Populate default values for Transmitters fields (ar and en)' def handle(self, *args, **options): self.stdout.write(self.style.WARNING("Starting to update Transmitters default values...")) default_values = { 'full_name': { 'ar': 'الإمام الحافظ أبو عيسى محمد بن عيسى بن سَوْرَة بن موسى بن الضحاك السُّلَمي الترمذي', 'en': 'Al-Imam al-Hafiz Abu Isa Muhammad ibn Isa ibn Sawrah ibn Musa ibn al-Dahhak al-Sulami al-Tirmidhi' }, 'kunya': { 'ar': 'أبو خالد', 'en': 'Abu Khalid' }, 'known_as': { 'ar': 'ابن هلال', 'en': 'ibn Hilal' }, 'nickname': { 'ar': 'البصري', 'en': 'Al-Basri' }, 'origin': { 'ar': 'البصرة، من قبيلة قريش', 'en': 'Basra, Quraysh tribe' }, 'freed_slave_of': { 'ar': 'غير مسجل', 'en': 'Not recorded' }, 'occupation': { 'ar': 'نجّار، تاجر', 'en': 'Carpenter, Merchant' }, 'features': { 'ar': 'أعرج، أعمى في عينٍ واحدة', 'en': 'Lame, blind in one eye' } } def update_json_field(field_data, new_ar, new_en): if not isinstance(field_data, list): field_data = [] # Remove existing ar and en field_data = [item for item in field_data if isinstance(item, dict) and item.get("language_code") not in ["ar", "en"]] # Add new ar and en field_data.append({"language_code": "ar", "text": new_ar}) field_data.append({"language_code": "en", "text": new_en}) return field_data transmitters = Transmitters.objects.all() count = transmitters.count() self.stdout.write(self.style.WARNING(f"Found {count} Transmitters to update.")) with transaction.atomic(): for transmitter in transmitters: transmitter.full_name = update_json_field(transmitter.full_name, default_values['full_name']['ar'], default_values['full_name']['en']) transmitter.kunya = update_json_field(transmitter.kunya, default_values['kunya']['ar'], default_values['kunya']['en']) transmitter.known_as = update_json_field(transmitter.known_as, default_values['known_as']['ar'], default_values['known_as']['en']) transmitter.nickname = update_json_field(transmitter.nickname, default_values['nickname']['ar'], default_values['nickname']['en']) transmitter.origin = update_json_field(transmitter.origin, default_values['origin']['ar'], default_values['origin']['en']) # mawla status -> freed_slave_of transmitter.freed_slave_of = update_json_field(transmitter.freed_slave_of, default_values['freed_slave_of']['ar'], default_values['freed_slave_of']['en']) # profession -> occupation transmitter.occupation = update_json_field(transmitter.occupation, default_values['occupation']['ar'], default_values['occupation']['en']) # physical traits -> features transmitter.features = update_json_field(transmitter.features, default_values['features']['ar'], default_values['features']['en']) transmitter.save() self.stdout.write(self.style.SUCCESS(f"✅ Successfully updated {count} Transmitters with new Arabic and English defaults!"))