Есть ли смысл определять models.Index или models.UniqueConstraint в классе Meta модели Django, если managed = False

Я пытаюсь настроить модели Django с устаревшей базой данных. После запуска inspectdb я начал выполнять рекомендуемые базовые шаги по очистке (т.е. изменить порядок моделей, убедиться, что каждая модель имеет первичный ключ, внешние ключи "на удаление" и т.д.). Я решил сохранить managed = False в class Meta в каждой модели, чтобы избежать проблем миграции с унаследованным приложением, которые это может вызвать.

В дополнение к основным шагам по очистке мне интересно, рекомендуется ли вообще или необходимо добавить models.Index и models.UniqueConstraints к class Meta для моих таблиц, которые уже имеют эти индексы и ограничения, определенные в базе данных. Нужны ли эти специфические (класс Meta) настройки только для миграций или Django использует их для обеспечения ограничений и индексации на уровне приложения в дополнение к тому, что мой сервер базы данных (mysql 5.7) уже предназначен делать?

Необходимо ли ...

Нет.

Есть ли смысл в определении ...

Да и нет, в дополнение к функционированию в качестве подсказок для других разработчиков.

Индексы

Варианты: indexes / index_together

Не во время выполнения. Это используется только в двух местах:

  1. Миграции

  2. Проверки - Модели

    • Командировка: check

Уникальные ограничения

Варианты: constraints / unique_together

Да. В дополнение к двум местам, где используются индексы, это также используется в:

  1. Валидация форм и полей Ссылка на экземпляр модели - django.db.models.Model.validate_unique
    • Цепочка вызовов: form.is_valid()form.full_clean() → ... → self.instance.validate_unique()
Вернуться на верх