所以我知道改变模型但未能将迁移应用到数据库的人已经有很多问题了。但是,就我而言,我知道迁移已应用,因为我可以看到新的表数据。
基本上,我安装了django-cms,然后我在djangocms_column插件的MA ---o---o---o---T1---o B1
|
B2 \---o---o
中添加了一个字段,允许我在我的列中添加一个Bootstrap类名(例如models.py
, col-md-4
等)。
col-md-6
...
if hasattr(settings, "COLUMN_CLASS_CHOICES"):
CLASS_CHOICES = settings.COLUMN_CLASS_CHOICES
else:
CLASS_CHOICES = (
('col-md-1', _("col-md-1")),
('col-md-2', _("col-md-2")),
('col-md-3', _('col-md-3')),
('col-md-4', _("col-md-4")),
('col-md-5', _('col-md-5')),
('col-md-6', _("col-md-6")),
('col-md-7', _('col-md-7')),
('col-md-8', _('col-md-8')),
('col-md-9', _('col-md-9')),
('col-md-10', _('col-md-10')),
('col-md-11', _('col-md-11')),
('col-md-12', _('col-md-12')),
('', _('none')),
)
然后我运行@python_2_unicode_compatible
class Column(CMSPlugin):
"""
A Column for the MultiColumns Plugin
"""
width = models.CharField(_("width"), choices=WIDTH_CHOICES, default=WIDTH_CHOICES[0][0], max_length=50)
"""
This is the new field:
"""
bs_class = models.CharField(_("bs_class"), choices=CLASS_CHOICES, default=CLASS_CHOICES[0][0], max_length=50)
def __str__(self):
return u"%s" % self.get_width_display()
然后./manage.py makemigrations
,现在表格如下:
./manage.py migrate
然而,当我尝试访问测试服务器时,仍然会收到以下错误:
sqlite> select * from djangocms_column_column;
cmsplugin_ptr_id bs_class width
---------------- ---------- ----------
3 col-md-1 33%
5 col-md-1 33%
7 col-md-1 33%
19 col-md-1 33%
21 col-md-1 33%
23 col-md-1 33%
而且,是的,我尝试删除数据库并运行OperationalError at /en/
no such column: djangocms_column_column.bs_class
Request Method: GET
Request URL: http://localhost:8000/en/
Django Version: 1.7.10
Exception Type: OperationalError
Exception Value:
no such column: djangocms_column_column.bs_class
,但该网站仍然显示相同的错误。是否必须使用特殊的迁移过程来修改./manage.py migrate
文件夹中安装的插件?
答案 0 :(得分:1)
所以我实际上弄明白是什么导致了这种行为。在设计我的gulp任务时,我重新构建了项目文件夹,将所有django创建的文件放在src
子目录中。
我这样做是因为在gulpfile.js
或bower_components
中的文件被修改时,更容易以这种方式观看我的应用文件以进行更改而不会无意中触发我的观看任务。 (最终,它并不重要,因为我的整体比django项目根更具体。)
除了settings.DATABASES['default']['NAME']
是相对路径project.db
之外,这不会有问题。因此,当我从./manage.py migrate
目录中运行/src
时,它会在/src/project.db
上执行迁移。当我从父目录运行src/manage.py migrate
时,迁移是在/project.db
上执行的。 djangocms应用程序本身正在使用后者,而我一直在对前者进行所有迁移。
所以这里的课程是:
答案 1 :(得分:0)
您是否尝试删除应用内迁移文件夹中的迁移?