""" 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)