Используйте Django Migrations для удаления таблицы - PullRequest
0 голосов
/ 23 февраля 2019

Я переезжаю из Rails в Django и у меня уже есть база данных.Я создал models.py через python manage.py inspectdb > models.py, внес изменения и проверил некоторые конечные точки.Все вроде нормально.

Затем я запустил python manage.py makemigrations и migrate, чтобы сделать первоначальное отражение django.

Я заметил специфическую модель / таблицу старого Rail, названную ArInternalMetadata / ar_internal_metadata.Я полагаю, что могу легко удалить таблицу, просто удалив модель из models.py и повторно запустив makemigrations, однако, когда я это сделаю, django просто скажет No changes detected.Выполнение migrate также не удаляет таблицу.

1 Ответ

0 голосов
/ 23 февраля 2019

Разобрался.Когда inspectdb создает Модели из существующей базы данных, он устанавливает managed во внутреннем классе Meta на False по умолчанию.

class AssetCategories(FacadeModel):
    created_at = models.DateTimeField()
    updated_at = models.DateTimeField()
    name = models.CharField(max_length=255)
    deleted_at = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'asset_categories'

В соответствии с Django 2.1 Docs это предотвратит удаление

Если False, никакие операции по созданию или удалению таблицы базы данных для этого не будут выполняться.модель

Удаление managed = False из класса Meta позволяет makemigrations / migrate удалить таблицу.

...