3 changed files with 158 additions and 9 deletions
-
83apps/hadis/management/commands/seed_transmitters_defaults.py
-
34apps/hadis/serializers/category.py
-
50apps/hadis/serializers/hadis.py
@ -0,0 +1,83 @@ |
|||||
|
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!")) |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue