Django: Принудительное создание индекса для полей ForeignKey, когда `supports_foreign_keys=False` в базе данных
Я пытаюсь использовать Django (v4.1.3) с БД Planet Scale, которая совместима с MySQL за исключением того, что не поддерживает внешние ключи.
Для этого они предоставляют Django DB driver, который подклассифицирует функциональный класс MySQL DB
from django.db.backends.mysql.features import \
DatabaseFeatures as MysqlBaseDatabaseFeatures
class DatabaseFeatures(MysqlBaseDatabaseFeatures):
supports_foreign_keys = False
Учитывая это, когда я создаю миграции и применяю их на локальном сервере MySQL, я не вижу создания внешних ключей, как ожидалось. Однако я также не вижу, что ключи создаются, но мне все еще нужны ключи.
Например, при использовании драйвера MySQL, когда я запускаю SHOW CREATE app_user_groups
(из пакета django.contrib.auth
), я вижу следующий ключ:
CREATE TABLE `auth_group_permissions` (
...
KEY `auth_group_permissio_permission_id_84c5c92e_fk_auth_perm` (`permission_id`),
)
Но с драйвером Planet Scale (supports_foreign_keys = False
) Django не создает ключ/индекс.
Я знаю, что в своих моделях я могу явно определять ключи, но я не считаю это идеальным. Кроме того, у меня нет контроля над моделями из других приложений Django, таких как django.contrib.auth
и многих других сторонних приложений.
Что я могу сделать, чтобы заставить Django создавать ключи на django.db.models.ForeignKey
, несмотря на то, что поддержка внешних ключей отключена.