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-migrations 检测模型更改,但不会在迁移时应用它们