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.
 
 

91 lines
3.4 KiB

"""
Management command to migrate transmitter reliability data from CharField to ForeignKey.
Run this after the migration 0069_alter_transmitters_reliability has been applied.
"""
from django.core.management.base import BaseCommand
from apps.hadis.models import Transmitters, TransmitterReliability
class Command(BaseCommand):
help = 'Migrate transmitter reliability data from CharField to ForeignKey'
def handle(self, *args, **options):
self.stdout.write('Starting transmitter reliability data migration...')
# Get or create reliability objects
reliability_mapping = self.get_reliability_mapping()
# Update transmitters
updated_count = 0
for transmitter in Transmitters.objects.all():
old_value = getattr(transmitter, 'reliability_old', None)
if old_value and old_value in reliability_mapping:
transmitter.reliability = reliability_mapping[old_value]
transmitter.save()
updated_count += 1
elif not transmitter.reliability:
# Set default for transmitters without reliability
transmitter.reliability = reliability_mapping['unknown']
transmitter.save()
updated_count += 1
self.stdout.write(
self.style.SUCCESS(
f'Successfully migrated {updated_count} transmitters'
)
)
def get_reliability_mapping(self):
"""Get mapping of old values to new TransmitterReliability objects"""
mapping = {}
# Define the reliability levels
reliability_data = [
('very_reliable', 'Very Reliable', 'green'),
('reliable', 'Reliable', 'blue'),
('acceptable', 'Acceptable', 'yellow'),
('weak', 'Weak', 'orange'),
('very_weak', 'Very Weak', 'red'),
('unknown', 'Unknown', 'gray'),
]
for value, title, color in reliability_data:
obj, created = TransmitterReliability.objects.get_or_create(
title__0__text=title, # Check if object exists by title
defaults={
'title': [
{'text': title, 'language_code': 'en'},
{'text': self.get_persian_title(title), 'language_code': 'fa'},
{'text': self.get_russian_title(title), 'language_code': 'ru'}
],
'color': color
}
)
mapping[value] = obj
return mapping
def get_persian_title(self, english_title):
"""Get Persian translation"""
translations = {
'Very Reliable': 'بسیار قابل اعتماد',
'Reliable': 'قابل اعتماد',
'Acceptable': 'قابل قبول',
'Weak': 'ضعیف',
'Very Weak': 'بسیار ضعیف',
'Unknown': 'نامشخص'
}
return translations.get(english_title, english_title)
def get_russian_title(self, english_title):
"""Get Russian translation"""
translations = {
'Very Reliable': 'Очень надежный',
'Reliable': 'Надежный',
'Acceptable': 'Приемлемый',
'Weak': 'Слабый',
'Very Weak': 'Очень слабый',
'Unknown': 'Неизвестный'
}
return translations.get(english_title, english_title)