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