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.
77 lines
2.8 KiB
77 lines
2.8 KiB
from django.db import migrations, models
|
|
|
|
|
|
def migrate_secondary_translations_forward(apps, schema_editor):
|
|
QuranSecondaryTranslation = apps.get_model('hadis', 'QuranSecondaryTranslation')
|
|
|
|
for obj in list(QuranSecondaryTranslation.objects.all()):
|
|
trans_list = obj.translation_text or []
|
|
auth_list = obj.translator or []
|
|
|
|
trans_map = {}
|
|
if isinstance(trans_list, list):
|
|
for item in trans_list:
|
|
if isinstance(item, dict) and item.get('language_code'):
|
|
trans_map[item['language_code']] = item.get('text') or item.get('title') or ''
|
|
elif isinstance(trans_list, str):
|
|
trans_map['ru'] = trans_list
|
|
|
|
auth_map = {}
|
|
if isinstance(auth_list, list):
|
|
for item in auth_list:
|
|
if isinstance(item, dict) and item.get('language_code'):
|
|
auth_map[item['language_code']] = item.get('text') or item.get('title') or ''
|
|
elif isinstance(auth_list, str):
|
|
auth_map['ru'] = auth_list
|
|
|
|
langs = list(set(trans_map.keys()) | set(auth_map.keys()))
|
|
if not langs:
|
|
langs = ['ru']
|
|
|
|
first_lang = langs[0]
|
|
obj.language_code = first_lang
|
|
obj.new_translation_text = trans_map.get(first_lang, '')
|
|
obj.new_translator = auth_map.get(first_lang, '')
|
|
obj.save(update_fields=['language_code', 'new_translation_text', 'new_translator'])
|
|
|
|
for extra_lang in langs[1:]:
|
|
QuranSecondaryTranslation.objects.create(
|
|
quran_verse_id=obj.quran_verse_id,
|
|
language_code=extra_lang,
|
|
new_translation_text=trans_map.get(extra_lang, ''),
|
|
new_translator=auth_map.get(extra_lang, ''),
|
|
)
|
|
|
|
|
|
def migrate_secondary_translations_backward(apps, schema_editor):
|
|
pass
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
atomic = False
|
|
|
|
dependencies = [
|
|
('hadis', '0041_alter_hadisdatabaseversion_version_and_more'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.AddField(
|
|
model_name='quransecondarytranslation',
|
|
name='language_code',
|
|
field=models.CharField(db_index=True, default='ru', max_length=10, verbose_name='Language Code'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='quransecondarytranslation',
|
|
name='new_translation_text',
|
|
field=models.TextField(default='', verbose_name='Translation Text'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='quransecondarytranslation',
|
|
name='new_translator',
|
|
field=models.CharField(default='', max_length=255, verbose_name='Translator Name'),
|
|
),
|
|
migrations.RunPython(
|
|
migrate_secondary_translations_forward,
|
|
migrate_secondary_translations_backward,
|
|
),
|
|
]
|