81 lines
3.1 KiB
Python
81 lines
3.1 KiB
Python
# Generated manually to migrate subject data from CharField to ForeignKey
|
|
|
|
from django.db import migrations, connection
|
|
|
|
|
|
def migrate_subject_data_forward(apps, schema_editor):
|
|
"""
|
|
Перенос данных из старого поля subject (CharField) в subject_name.
|
|
Выполняется перед изменением типа поля subject на ForeignKey.
|
|
"""
|
|
# Проверяем тип колонки subject в базе данных
|
|
with connection.cursor() as cursor:
|
|
# Для таблицы lessons
|
|
cursor.execute("""
|
|
SELECT data_type
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'lessons' AND column_name = 'subject'
|
|
""")
|
|
result = cursor.fetchone()
|
|
|
|
if result and result[0] == 'character varying': # CharField в PostgreSQL
|
|
# Переносим данные из subject в subject_name для Lesson
|
|
cursor.execute("""
|
|
UPDATE lessons
|
|
SET subject_name = subject
|
|
WHERE subject IS NOT NULL
|
|
AND subject != ''
|
|
AND (subject_name IS NULL OR subject_name = '')
|
|
""")
|
|
|
|
# Для таблицы lesson_templates
|
|
cursor.execute("""
|
|
SELECT data_type
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'lesson_templates' AND column_name = 'subject'
|
|
""")
|
|
result = cursor.fetchone()
|
|
|
|
if result and result[0] == 'character varying': # CharField в PostgreSQL
|
|
# Переносим данные из subject в subject_name для LessonTemplate
|
|
cursor.execute("""
|
|
UPDATE lesson_templates
|
|
SET subject_name = subject
|
|
WHERE subject IS NOT NULL
|
|
AND subject != ''
|
|
AND (subject_name IS NULL OR subject_name = '')
|
|
""")
|
|
|
|
|
|
def migrate_subject_data_backward(apps, schema_editor):
|
|
"""
|
|
Обратная миграция - перенос данных из subject_name обратно в subject.
|
|
"""
|
|
Lesson = apps.get_model('schedule', 'Lesson')
|
|
LessonTemplate = apps.get_model('schedule', 'LessonTemplate')
|
|
|
|
# Переносим данные из subject_name обратно в subject для Lesson
|
|
for lesson in Lesson.objects.all():
|
|
if lesson.subject_name:
|
|
lesson.subject = lesson.subject_name
|
|
lesson.save(update_fields=['subject'])
|
|
|
|
# Переносим данные из subject_name обратно в subject для LessonTemplate
|
|
for template in LessonTemplate.objects.all():
|
|
if template.subject_name:
|
|
template.subject = template.subject_name
|
|
template.save(update_fields=['subject'])
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
('schedule', '0005_lesson_subject_name_lessontemplate_subject_name_and_more'),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(
|
|
migrate_subject_data_forward,
|
|
migrate_subject_data_backward,
|
|
),
|
|
]
|