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