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.
 
 
 
 

83 lines
4.0 KiB

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!"))