from django.core.management.base import BaseCommand from django.db import transaction from apps.hadis.models import HadisCorrection # adjust import if app/model name is different def normalize_translation_items(value): """ Convert items like: [{"lang": "en", "text": "..."}, {"lang": "fa", "text": "..."}] to: [{"language_code": "en", "text": "..."}, {"language_code": "fa", "text": "..."}] If already correct, leave as-is. Ignore items without text. """ if not value: return [] if not isinstance(value, list): # Unexpected format, just return as-is return value cleaned = [] for item in value: if not isinstance(item, dict): continue # Prefer existing language_code, else use lang lang = item.get("language_code") or item.get("lang") text = item.get("text") if not lang or not text: continue cleaned.append( { "language_code": str(lang), "text": text, } ) return cleaned class Command(BaseCommand): help = "Rename 'lang' to 'language_code' in HadisCorrection.translation JSON list entries." @transaction.atomic def handle(self, *args, **options): qs = HadisCorrection.objects.all() total = qs.count() self.stdout.write(f"Found {total} HadisCorrection objects") changed = 0 for obj in qs: old = obj.translation new = normalize_translation_items(old) if new != old: obj.translation = new obj.save(update_fields=["translation"]) changed += 1 self.stdout.write(self.style.SUCCESS(f"Updated {changed} HadisCorrection objects"))