# Migration to handle data conversion for transmitter reliability field from django.db import migrations def create_reliability_objects(apps, schema_editor): """Create TransmitterReliability objects for each reliability level""" TransmitterReliability = apps.get_model('hadis', 'TransmitterReliability') # Define the reliability levels with their data reliability_data = [ { 'title': [ {'text': 'Very Reliable', 'language_code': 'en'}, {'text': 'بسیار قابل اعتماد', 'language_code': 'fa'}, {'text': 'Очень надежный', 'language_code': 'ru'} ], 'color': 'green', 'value': 'very_reliable' }, { 'title': [ {'text': 'Reliable', 'language_code': 'en'}, {'text': 'قابل اعتماد', 'language_code': 'fa'}, {'text': 'Надежный', 'language_code': 'ru'} ], 'color': 'blue', 'value': 'reliable' }, { 'title': [ {'text': 'Acceptable', 'language_code': 'en'}, {'text': 'قابل قبول', 'language_code': 'fa'}, {'text': 'Приемлемый', 'language_code': 'ru'} ], 'color': 'yellow', 'value': 'acceptable' }, { 'title': [ {'text': 'Weak', 'language_code': 'en'}, {'text': 'ضعیف', 'language_code': 'fa'}, {'text': 'Слабый', 'language_code': 'ru'} ], 'color': 'orange', 'value': 'weak' }, { 'title': [ {'text': 'Very Weak', 'language_code': 'en'}, {'text': 'بسیار ضعیف', 'language_code': 'fa'}, {'text': 'Очень слабый', 'language_code': 'ru'} ], 'color': 'red', 'value': 'very_weak' }, { 'title': [ {'text': 'Unknown', 'language_code': 'en'}, {'text': 'نامشخص', 'language_code': 'fa'}, {'text': 'Неизвестный', 'language_code': 'ru'} ], 'color': 'gray', 'value': 'unknown' } ] reliability_objects = {} for data in reliability_data: obj = TransmitterReliability.objects.create( title=data['title'], color=data['color'] ) reliability_objects[data['value']] = obj return reliability_objects def migrate_transmitter_data(apps, schema_editor): """Migrate existing transmitter reliability data""" Transmitters = apps.get_model('hadis', 'Transmitters') # Create reliability objects reliability_objects = create_reliability_objects(apps, schema_editor) # Update all transmitters to use the new foreign key references for transmitter in Transmitters.objects.all(): old_value = getattr(transmitter, 'reliability', None) if old_value and old_value in reliability_objects: transmitter.reliability = reliability_objects[old_value] transmitter.save(update_fields=['reliability']) elif old_value == 'unknown' or not old_value: # Default to unknown if no value or unknown transmitter.reliability = reliability_objects.get('unknown') transmitter.save(update_fields=['reliability']) def reverse_migrate(apps, schema_editor): """Reverse migration - not needed since we're changing field types""" pass class Migration(migrations.Migration): dependencies = [ ('hadis', '0069_alter_transmitters_reliability'), ] operations = [ migrations.RunPython(migrate_transmitter_data, reverse_migrate), ]