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

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