# Generated by Django 4.2.27 on 2025-12-23 08:32 from django.db import migrations, models import django.db.models.deletion 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 temporary field for transmitter in Transmitters.objects.all(): old_value = getattr(transmitter, 'reliability', None) if old_value and old_value in reliability_objects: transmitter.reliability_new = reliability_objects[old_value] else: # Default to unknown if no value or invalid value transmitter.reliability_new = reliability_objects['unknown'] transmitter.save() def reverse_migrate(apps, schema_editor): """Reverse migration - not needed since we're changing field types""" pass class Migration(migrations.Migration): dependencies = [ ("hadis", "0068_transmitterreliability"), ] operations = [ # Step 1: Add a temporary ForeignKey field migrations.AddField( model_name='transmitters', name='reliability_new', field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="transmitters_temp", to="hadis.transmitterreliability", verbose_name="reliability", null=True, ), ), # Step 2: Run data migration to populate the new field migrations.RunPython(migrate_transmitter_data, reverse_migrate), # Step 3: Remove the old field migrations.RemoveField( model_name='transmitters', name='reliability', ), # Step 4: Rename the new field to the final name migrations.RenameField( model_name='transmitters', old_name='reliability_new', new_name='reliability', ), ]