2016-08-19 2 views
0

В настоящее время я пытаюсь обновить свои модели Django, чтобы включить некоторые новые функции, но после запуска «makemigrations» вывод на консоль вызывает у меня беспокойство. Я собираюсь перезаписать другие таблицы в базе данных.Опасность перезаписывать таблицы через миграции моделей Django?

По сути, на моих моделях.py у меня есть 8 моделей. Один из них совершенно новый, он просто модифицирован. Я хочу перенести эти изменения в базу данных, чтобы запустить «makemigrations». Создается файл миграции (я отмечаю, что нет других - предположительно, тот, кто их создал, изначально удалил по какой-либо причине). Выход консоли:

- Create model ModelNew 
- Create model ModelDontTouch 
- Create model ModelDontTouch 
- Create model ModelDontTouch 
- Create model ModelDontTouch 
- Create model ModelDontTouch 
- Create model ModelDontTouch 
- Create model ModelUpdated 

Почему говорят создать модель? Это потому, что, насколько известно Django, это первая миграция, когда-либо выполнявшаяся? Или он планирует переписать все эти другие таблицы (что полностью уничтожит наше приложение и приведет к очень страшному дню)?

Я также заметил, некоторые модели определили

db_table = 'some_table' 
db_tablespace = 'sometable' 

другие, просто, db_tablespace = 'sometable'

других, вообще ничего. У кого-нибудь есть мысли по этому поводу?

ответ

2

Django не проводит опрос самой базы данных при выполнении миграций; он создает график, основанный на предыдущих миграциях и текущем состоянии моделей. Поэтому, если нет предыдущих миграций, Django создаст их с нуля. Это не будет перезаписывать ваши таблицы, но на самом деле это не будет работать, поскольку он попытается их создать, и база данных откажется.

Один из вариантов заключается в том, чтобы временно отменить изменения и снова запустить makemigrations, чтобы вернуться в нужную начальную точку, затем выполнить эту миграцию с помощью --fake-initial, чтобы пометить ее как применяемую, не выполнив ее, а затем повторно применить изменения и снова запустить makemigrations ,

+0

Спасибо, Даниэль, это отличная идея. Я сделаю это. – Rob

+0

Поддерживается ли эта команда в Django 1.7? И «makemigrations -fake my_app» и «makemigrations -fake-initial my_app», похоже, не работают. – Rob

Смежные вопросы