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.
 
 
 
 

64 lines
2.1 KiB

# Generated by Django 4.2.30 on 2026-07-19 12:21
import json
from django.db import migrations, models
def convert_titles_to_json(apps, schema_editor):
CalendarOccasions = apps.get_model('dobodbi_calendar', 'CalendarOccasions')
for occasion in CalendarOccasions.objects.all():
title_str = occasion.title
if not title_str:
occasion.title = '[]'
occasion.save()
continue
# Check if it's already a valid JSON list/dict
try:
parsed = json.loads(title_str)
if isinstance(parsed, (list, dict)):
# Already valid JSON
continue
except Exception:
pass
# Convert plain text to JSON list
new_title = [{"language_code": "fa", "title": title_str}]
occasion.title = json.dumps(new_title, ensure_ascii=False)
occasion.save()
def convert_json_to_titles(apps, schema_editor):
CalendarOccasions = apps.get_model('dobodbi_calendar', 'CalendarOccasions')
for occasion in CalendarOccasions.objects.all():
title_str = occasion.title
try:
parsed = json.loads(title_str)
if isinstance(parsed, list) and len(parsed) > 0:
# Try English first, then fallback
val = ""
for item in parsed:
if isinstance(item, dict):
val = item.get("title") or item.get("text") or val
if item.get("language_code") == "en":
break
occasion.title = val
occasion.save()
except Exception:
pass
class Migration(migrations.Migration):
dependencies = [
('dobodbi_calendar', '0001_initial'),
]
operations = [
migrations.RunPython(convert_titles_to_json, convert_json_to_titles),
migrations.AlterField(
model_name='calendaroccasions',
name='title',
field=models.JSONField(blank=True, default=list, verbose_name='title'),
),
]