我使用的是django 1.8,我在添加到models.py时遇到了问题。目前它是:
from django.db import models
# Create your models here.
class Company(models.Model):
role = models.CharField(max_length=32, blank=True)
name = models.CharField(max_length=70, blank=True)
并且它工作得很好,但每当我尝试添加到此,然后运行服务器我得到
OperationalError:没有这样的列[添加元素]
例如,我添加了founder = models.CharField(max_length=200, blank=True)
,我运行了程序,我得到了
django.db.utils.OperationalError:没有这样的专栏:companies_company.founder
答案 0 :(得分:3)
在您的控制台中运行此命令:
manage.py makemigrations app_name
manage.py migrate app_name
每次在应用程序中更改模型时,都应使用makemigration和migrate命令将更改迁移到数据库。向db表中添加新列时,必须将此列的值添加到所有现有行。您可以通过在模型的新字段中设置默认值来执行此操作。 或者在运行migrate命令时设置值(django会自动提出这个) 您可以在docs
中了解相关信息答案 1 :(得分:0)
您必须使用python manage.py makemigrations重新同步数据库
答案 2 :(得分:0)
当您运行forms.py
时,某些其他文件(例如views.py
或models.py
而不是makemigrations
的模型字段上有某些操作时会发生此类问题。如果你仔细阅读了追溯,你可以从问题所在的文件中找出它。
例如,如果回溯告诉您forms.py
中可能碰巧使用某些模型字段的某些投诉,只需注释掉处理模型字段的代码并再次重新运行makemigrations
。希望它能解决问题。
如果是,则可以删除之前添加的评论。
答案 3 :(得分:0)
我发现先清除python3 manage.py sqlflush
然后清除python3 manage.py flush
的所有数据
然后进行makemigrations,sqlmigrate,然后进行迁移
它将删除SQL数据库中的所有数据,包括用户和对象
答案 4 :(得分:0)
可能不是最佳选择,但这样做对我很有用(默认设置无效):
python manage.py runserver
(没有以前的迁移,迁移不起作用,我认为它已链接到调用标签的视图/模板,因此必须先运行)python manage.py migrate
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
python manage.py createsuperuser