Я удаляю миграции django, но у меня есть ошибки - PullRequest
0 голосов
/ 29 июня 2018

я удаляю все файлы миграции

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc"  -delete

затем сбросьте базу данных и создайте новую, очистите. Но когда я пытаюсь создать начальные миграции и создать схему базы данных:

python manage.py makemigrations

у меня ошибка

django.db.utils.ProgrammingError: (1146, "Table 'buzz_local.api_userprofile' doesn't exist")

почему? мне не нужны никакие файлы миграции, потому что нам нужно воссоздать текущую базу данных

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

в моем случае; Я решил проблему миграции приложений одно за другим. Также в одном из моих приложений мне пришлось закомментировать центральную модель (модель, которая имеет много внешних ключей для других моделей) при первой миграции, а затем повторно активировать ее для второй миграции для этого приложения.

Я не уверен, работает ли это в любом случае, но технически это должно. Надеюсь, это поможет.

0 голосов
/ 29 июня 2018

Некоторое время назад у нас тоже была такая же проблема. Если один файл в папке миграции удаляется, это может привести к хаосу. Мы сделали следующее:

Поскольку вы упомянули, что вы создаете новую базу данных , вы можете, вероятно, сделать

  1. Удалить все файлы в папке migrations, оставив файл __init__.py (В случае удаления просто создайте новый пустой файл с именем __init__.py).

Затем попробуйте команду makemigrations. В большинстве случаев это работает, так как все файлы миграции восстанавливаются.

  1. Если описанный выше метод не работает, вам придется создавать таблицы вручную. Это немного тяжелая работа, так как вам придется вручную создавать все поля в такой таблице. Если вы не знаете, как создавать вручную (или беспокоитесь о том, что таблицы могут испортиться), вы можете проверить базу данных любого предыдущего проекта Django и проверить, какие свойства присваиваются каждому полю различных типов.

Шаг 2 не такой грязный, если вы правильно выполняете процедуры. Например, вы определили ImageField как (например, в MySQL)

image = ImageField(upload_to='/pics', null=True, blank=True)

В базе данных это просто поле VARCHAR

'image' varchar(100) DEFAULT NULL,

Эти методы работали для нас в 2 наших проектах, еще раз я бы сказал, что вы можете попробовать это, если вы создаете новую базу данных. Если вы работаете с существующей базой данных, это может быть проблематично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...