74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
"""
|
||
Миграция для изменения модели ObjectMark:
|
||
- Удаление всех существующих отметок
|
||
- Удаление поля source
|
||
- Добавление поля tech_analyze
|
||
"""
|
||
|
||
from django.db import migrations, models
|
||
import django.db.models.deletion
|
||
|
||
|
||
def delete_all_marks(apps, schema_editor):
|
||
"""Удаляем все существующие отметки перед изменением структуры."""
|
||
ObjectMark = apps.get_model('mainapp', 'ObjectMark')
|
||
count = ObjectMark.objects.count()
|
||
ObjectMark.objects.all().delete()
|
||
print(f"Удалено {count} отметок ObjectMark")
|
||
|
||
|
||
def noop(apps, schema_editor):
|
||
"""Обратная операция - ничего не делаем."""
|
||
pass
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
|
||
dependencies = [
|
||
('mainapp', '0021_add_source_request_fields'),
|
||
]
|
||
|
||
operations = [
|
||
# Сначала удаляем все отметки
|
||
migrations.RunPython(delete_all_marks, noop),
|
||
|
||
# Удаляем старое поле source
|
||
migrations.RemoveField(
|
||
model_name='objectmark',
|
||
name='source',
|
||
),
|
||
|
||
# Добавляем новое поле tech_analyze
|
||
migrations.AddField(
|
||
model_name='objectmark',
|
||
name='tech_analyze',
|
||
field=models.ForeignKey(
|
||
help_text='Связанный технический анализ',
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name='marks',
|
||
to='mainapp.techanalyze',
|
||
verbose_name='Тех. анализ',
|
||
),
|
||
preserve_default=False,
|
||
),
|
||
|
||
# Обновляем метаданные модели
|
||
migrations.AlterModelOptions(
|
||
name='objectmark',
|
||
options={
|
||
'ordering': ['-timestamp'],
|
||
'verbose_name': 'Отметка сигнала',
|
||
'verbose_name_plural': 'Отметки сигналов'
|
||
},
|
||
),
|
||
|
||
# Добавляем индекс для оптимизации запросов
|
||
migrations.AddIndex(
|
||
model_name='objectmark',
|
||
index=models.Index(
|
||
fields=['tech_analyze', '-timestamp'],
|
||
name='mainapp_obj_tech_an_idx'
|
||
),
|
||
),
|
||
]
|