Есть ли смысл определять 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
Не во время выполнения. Это используется только в двух местах:
-
- Команды:
makemigrations
,migrate
- Команды:
-
- Командировка:
check
- Командировка:
Уникальные ограничения
Варианты: constraints
/ unique_together
Да. В дополнение к двум местам, где используются индексы, это также используется в:
- Валидация форм и полей → Ссылка на экземпляр модели - django.db.models.Model.validate_unique
- Цепочка вызовов:
form.is_valid()
→form.full_clean()
→ ... →self.instance.validate_unique()
- Цепочка вызовов: