2015-05-26 3 views
-1

У меня есть модель в моем приложении Django, для которой требуется добавить новый столбец BooleanField. Этот столбец никогда не должен быть нулевым - вместо этого я хотел бы, чтобы все существующие записи установили это поле в False.Как установить значение по умолчанию для существующих записей при добавлении нового столбца?

Как это сделать? Если я просто добавлю новое поле и задаю default = False, это вызовет ошибку OperationalError: no such column.

+0

Я считаю, что 'manage.py migrate' обрабатывает этот случай и задает для вас значение по умолчанию, вы пробовали? – Wtower

ответ

0

Оказывается, я пропустил, что команда мигрирует требует имя приложения. Итак, я должен был запустить команду следующим образом:

manage.py makemigrations app_name 
+0

Имя приложения требуется только в том случае, если миграции еще нет. Это делается для предотвращения случайного генерирования миграции, если приложение не хочет миграции. – knbk

2

Вам необходимо использовать Django's migrations, что позволит вам добавить это поле в базу данных.

Короче говоря, вы вносите изменения в свою модель, создаете миграцию с помощью manage.py makemigrations, а затем запустите ее с помощью manage.py migrate.

+0

Это работает, если я сначала удаляю все существующие строки. Однако это не работает, когда у меня есть существующие строки в таблице. Это вызывает ошибку, о которой я упоминал. – manabreak

+0

Когда вы получите эту ошибку? Когда вы запускаете '' makemigrations'' или '' migrate''? –

+0

После запуска этих программ и попыток доступа к таблице в панели администратора Django. 'makemigrations' говорит« никаких изменений не обнаружено »при добавлении нового поля. – manabreak

-1

По умолчанию BooleanField столбец False, вам не нужно указывать что-либо. Просто запустите python manage.py migrate. Он должен работать.

0

Похоже, вам нужно перенести свою базу данных после добавления нового столбца. Например, когда вы используете команду syncdb для выполнения команд «create table» при первом создании вашей базы данных, миграции будут записывать изменения «alter table» в вашу базу данных.

https://docs.djangoproject.com/en/1.8/topics/migrations/

+0

Я выполнял команды миграции как обычно, но существующие строки не затрагиваются. Единственный способ, которым я знаю, как это решить, - удалить все существующие строки, что не является идеальным. – manabreak

+1

Произошла ли первоначальная миграция в приложении? –

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