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.
 
 

109 lines
3.8 KiB

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