Django `db_table` не переименовывает таблицу

Этот вопрос (на удивление) не похож на аналогичные, которые спрашивают о том, как сделать это динамически, или спрашивают, как сделать это в первую очередь. Этот вопрос относится к тем предложениям, которые не работают так, как ожидалось.

Краткое описание ситуации:

  1. Мы создали серию приложений Django как часть API, используемого в реальном веб-приложении.
  2. Мы назвали эти приложения так, чтобы это имело смысл в то время, например, "организации" и "аутентификация".
  3. Теперь мы упаковываем эти приложения в виде распространяемой библиотеки, чтобы сторонние разработчики могли установить наши приложения в свой API.
  4. У клиента уже есть приложения с названиями "организации" и "аутентификация", что вызывает конфликты (поскольку приложения Django должны иметь уникальные имена).
  5. Поскольку мы создаем библиотеку многократного использования, мы переименовываем наши приложения с organizations на mycompany_organizations, чтобы сделать их уникальными и различимыми.
  6. Я провел серию миграций, следуя этому руководству, чтобы создать новое приложение и перенести модели без потери данных.
  7. Все работало, пока кто-то не добавил новое приложение, которое ссылалось на нашу Organization модель. В результате миграции возникла ошибка relation my_company_organization does not exist, несмотря на то, что множество внешних ключей уже указывали на my_company_organizations.organization и работали нормально.
  8. Я проверил базу данных и обнаружил, что имена таблиц все еще в стиле organizations_organization вместо my_company_organizations_organization.
  9. Я установил db_table = "my_company_organization" на модели MyCompanyOrganization, чтобы попытаться переименовать таблицу базы данных.
  10. Я сделал и запустил миграции. Я проверил, что миграция 000x_alter_organization_table была успешно применена.
  11. Я все еще получаю ту же ошибку при первой миграции в новом приложении.
  12. Я проверил базу данных, organizations_organization
и

Как переименовать таблицу базы данных с помощью миграций Django? Изменение db_table явно не работает.

Вот код миграции, которая переименовывает таблицу:

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ("my_company_organizations", "0005_do_stuff"),
    ]

    operations = [
        migrations.AlterModelTable(
            name="organization",
            table="my_company_organizations_organization",
        ),
        migrations.AlterModelTable(
            name="organizationemaildomain",
            table="my_company_organizations_organizationemaildomain",
        ),
    ]

Ни одна из этих таблиц не переименовывается в my_company_x после успешного выполнения миграции.

Update: Это работает, если новое приложение зависит не только от последней миграции в приложении my_company_organizations, но и от последней миграции в старом приложении organizations (от которого зависит новое приложение). На мой взгляд, это не имеет смысла, поскольку миграции для переименования таблиц и все миграции в старом приложении все равно были выполнены до того, как оно достигло сбойной миграции. Добавление зависимости ничего не должно изменить, поскольку миграции, от которых она зависит, уже выполнены, но по какой-то причине добавление этой зависимости работает, и я вижу переименование в базе данных. Я не могу не считать это ошибкой в Django.

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