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, несмотря на то, что поддержка внешних ключей отключена.

Вернуться на верх