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.
134 lines
4.5 KiB
134 lines
4.5 KiB
# 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',
|
|
),
|
|
]
|