所以我有一个模型,我想添加ImageField,所以我输入 picture = models.ImageField(upload_to ='media / images')
然后我运行了syncdb并进入了shell:
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
在数据库中。
你们有什么解决方案?我无法删除数据库中的数据。
答案 0 :(得分:27)
如the documentation syncdb
中所述,不会向现有表添加列,只会创建新表。
我建议运行
python manage.py sqlall <your_app>
查看它为您正在更改的表输出的sql,然后运行
python manage.py dbshell
以手动发出ALTER TABLE
命令。
将来,您可能希望使用South等迁移工具。
答案 1 :(得分:3)
有两种可能性来获取此错误1)在执行syncdb之后,您向模型添加了额外的字段。 2)你在django中为model.py文件添加了新类。
解决方法是:
首先使用命令
向南安装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迁移your_app_name 希望这会对你有所帮助。
答案 2 :(得分:0)
从1.7 migrations within Django取代南方。
通过在终端中运行以下命令来创建一组新的迁移说明:
$ python manage.py makemigrations
检查它创建的迁移文件夹中的输出以确保它们有意义然后运行以下terminal命令来完成迁移:
$ python manage.py migrate
那就是它。
以这种方式运行迁移允许其他人实现相同的迁移,而不必使用代码在每台计算机上手动实现db更改。在新机器上,他们必须运行的是:
$ python manage.py migrate