Django не создает миграцию для создания индекса для устаревшего поля внешнего ключа

#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, я хотел бы отследить это изменение при миграции.