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, ), ]