Django 1.7(显然)没有在 manage.py 测试中运行迁移

Posted

技术标签:

【中文标题】Django 1.7(显然)没有在 manage.py 测试中运行迁移【英文标题】:Django 1.7 (apparently) not running migrations on manage.py test 【发布时间】:2015-02-02 14:01:06 【问题描述】:

在处理 Django 1.7 项目时,我需要向现有模型添加一个字段。

我添加了以下内容:bairro = models.CharField(max_length=200)

然后我运行了两个命令:

python manage.py makemigrations
python manage.py migrate

现在,测试将不再运行。 每当我运行python manage.py test 时,都会出现此错误:

django.db.utils.ProgrammingError: column admin_starbeli_salao.bairro does not exist

这很奇怪,因为如果我打开外壳,我可以添加对象并且该字段确实有效。

我能做什么?

【问题讨论】:

你能把你添加字段的模型贴出来吗? @Ymartin 我发现了问题,添加了一个答案解释。 【参考方案1】:

这是其中一次迁移的问题。

为了找到它是什么,我删除了我的数据库并尝试运行 python manage.py migrate,但出现了同样的错误。 然后我注意到一个相关模型对此模型有一个默认值,如下所示:

def first_my_model():
    return MyModel.objects.first().pk if MyModel.objects.first() else 0

它试图在此调用中使用新添加的(但在 db 上尚不存在)字段,从而引发错误。

【讨论】:

以上是关于Django 1.7(显然)没有在 manage.py 测试中运行迁移的主要内容,如果未能解决你的问题,请参考以下文章

将字段添加到 Django 的现有数据库(版本 < 1.7)

在 Django 1.7 中序列化类方法

Django 1.7 中的 Django-migrations 检测模型更改,但不会在迁移时应用它们

无法在 Django 1.7 中创建 South 数据库模型

我的旧项目出现 Django 1.7 迁移问题

Django 1.7 和 1.8 之间迁移行为的变化