3 changed files with 83 additions and 8 deletions
-
76apps/hadis/management/commands/reformat_translations.py
-
13apps/hadis/serializers/hadis.py
-
2apps/hadis/views/hadis.py
@ -0,0 +1,76 @@ |
|||
from django.core.management.base import BaseCommand |
|||
from django.db import transaction |
|||
|
|||
from apps.hadis.models import Hadis |
|||
|
|||
|
|||
def normalize_translation(value): |
|||
""" |
|||
Convert: |
|||
{"en": "translation", "fa": "ترجمه"} |
|||
to: |
|||
[{"text": "translation", "language_code": "en"}, |
|||
{"text": "ترجمه", "language_code": "fa"}] |
|||
|
|||
Also clean existing list entries by: |
|||
- ensuring only 'text' + 'language_code' |
|||
- dropping any 'title' key |
|||
""" |
|||
if value is None: |
|||
return [] |
|||
|
|||
# If it's already a list, clean its items |
|||
if isinstance(value, list): |
|||
cleaned = [] |
|||
for item in value: |
|||
if not isinstance(item, dict): |
|||
continue |
|||
lang = item.get("language_code") |
|||
# prefer 'text', fallback to 'title' |
|||
text = item.get("text") or item.get("title") |
|||
if not lang or not text: |
|||
continue |
|||
cleaned.append( |
|||
{ |
|||
"language_code": str(lang), |
|||
"text": text, |
|||
} |
|||
) |
|||
return cleaned |
|||
|
|||
# Old dict format: {"en": "...", "fa": "..."} |
|||
if isinstance(value, dict): |
|||
result = [] |
|||
for lang_code, text in value.items(): |
|||
if text is None or text == "": |
|||
continue |
|||
result.append( |
|||
{ |
|||
"language_code": str(lang_code), |
|||
"text": text, |
|||
} |
|||
) |
|||
return result |
|||
|
|||
return [] |
|||
|
|||
class Command(BaseCommand): |
|||
help = "Reformat Hadis.translation from {'en': '...', 'fa': '...'} to [{'text': '...', 'language_code': '...'}, ...]" # noqa: E501 |
|||
|
|||
@transaction.atomic |
|||
def handle(self, *args, **options): |
|||
qs = Hadis.objects.all() |
|||
total = qs.count() |
|||
self.stdout.write(f"Found {total} hadis objects") |
|||
|
|||
changed = 0 |
|||
for hadis in qs: |
|||
old = hadis.translation |
|||
new = normalize_translation(old) |
|||
|
|||
if new != old: |
|||
hadis.translation = new |
|||
hadis.save(update_fields=["translation"]) |
|||
changed += 1 |
|||
|
|||
self.stdout.write(self.style.SUCCESS(f"Updated {changed} hadis objects")) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue