Meta.indexes можно использовать для собственных миграцийОказывается,
models.Index в Django можно превратить почти в универсальную migration-операцию.Идея:
class CustomMigrationOperation(models.Index):
def create_sql(self, model, schema_editor, **kwargs):
...
def remove_sql(self, model, schema_editor, **kwargs):
...
А затем добавить её прямо в модель:
class Meta:
indexes = [CustomMigrationOperation()]
После этого makemigrations сам подхватит изменение, а migrate выполнит нужный SQL.
Почему это работает:
Index уже умеет генерировать SQL через create_sql() и remove_sql().
Так можно описывать не только индексы, но и:
triggers
table comments
security labels
другие schema-level настройки
Автор использовал этот приём для PostgreSQL Anonymizer, чтобы правила анонимизации жили рядом с моделью и автоматически попадали в миграции.
Подход довольно hacky, но как способ расширить механизм миграций Django — очень интересный.
https://www.better-simple.com/django/2026/09/02/nifty-feature-use-index-for-custom-migrations/