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
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'),
|
|
),
|
|
]
|