Подтвердить что ты не робот

DatabaseError: нет такой ошибки столбца

Итак, у меня есть модель, в которую я хотел добавить ImageField, поэтому я набрал   picture = models.ImageField(upload_to = 'media/images')

Затем я запустил syncdb и пошел в оболочку:

python2 manage.py syncdb
python2 manage.py shell

Затем я импортировал модель и попытался

"model".objects.get(pk=1)

Я получаю сообщение об ошибке:

DatabaseError: no such column: people_people.picture

Когда я запускаю файл manage.py sql для модели

"picture" varchar(100) NOT NULL

находится в базе данных.

Какие решения у вас есть? Я не могу удалить данные в базе данных.

4b9b3361

Ответ 1

Как отмечено в документация syncdb не добавляет столбцы в существующие таблицы, она создает только новые таблицы.

Я предлагаю запустить

python manage.py sqlall <your_app>

Глядя на sql, он выводит для таблицы, которую вы меняете, а затем запускаете

python manage.py dbshell

чтобы вручную выполнить команду ALTER TABLE.

В будущем вам может понадобиться инструмент переноса, например South.

Ответ 2

Есть две возможности для получения этой ошибки. 1) Вы добавили дополнительное поле в модель после выполнения syncdb. 2) вы добавили новый класс в файл model.py в django.

Решение для этого:

Сначала установите юг с помощью команды

for windows: **easy_install south**     //for that you need to go to the script folder of python folder in c drive.

for linux: **sudo easy_install south**  

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

step1- python manage.py schemamigration your_app_name --initial

step-2 python manage.py migrate your_app_name Надеюсь, это поможет вам.

Ответ 3

Начиная с 1.7 миграции в Django заменяет юг.

Создайте новый набор инструкций по миграции, выполнив следующую команду в терминале:

$ python manage.py makemigrations

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

$ python manage.py migrate

Что это.

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

$ python manage.py migrate