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