#django
#django
Вопрос:
У меня есть устаревшая таблица, у которой нет индекса для поля внешнего ключа в базе данных PostgreSQL. Согласно документам, Django автоматически создает индекс для полей внешнего ключа.
Я хотел бы добавить индекс к этому полю. Когда я указываю db_index=True
в поле внешнего ключа и запускаю makemigrations
, он сообщает:
Изменений не обнаружено
Пример:
class Member(models.Model):
...
group_id = models.ForeignKey(Group, models.DO_NOTHING, db_index=True) # added `db_index=True` here
Есть ли способ заставить django создать миграцию для создания индекса для этого поля?
Комментарии:
1. Это верно, но для большинства баз данных не требуется создавать миграцию. Большинство баз данных автоматически создают индекс для всех
FOREIGN KEY
ограничений.2. В MySQL вы можете проверить индексы с помощью
SHOW INDEX FROM table_name FROM db_name;
, вероятно, у других серверных частей базы данных будут похожие запросы.3. Однако, если ваша модель имеет
managed = False
. Вы несете ответственность за управление таблицей на стороне базы данных. Таким образом, Django пропустит любые изменения в моделях. Таким образом, это означает, что вы должны создать индекс самостоятельно.4. Спасибо за ответ @WillemVanOnsem. Эта таблица изначально была создана вне Django и теперь является управляемой таблицей. По какой-либо причине индекс изначально не был создан с помощью внешнего ключа при создании таблицы. Теперь, когда им управляет Django, я хотел бы отследить это изменение при миграции.