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