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