""" Миграция для изменения модели 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' ), ), ]