Django 1.7中的Django迁移检测到模型更改,但不会在迁移时应用它们
我一直在尝试使用1.7中的迁移来同步Django应用程序中的模型更改(postgres 9.1-如果您需要有关我的环境的更多详细信息,请告诉我),但是manage.py migrate似乎什么都不做,sqlmigrate也不发出任何SQL 我认为这可能适用于我的情况,我在数据库中的django_migrations表中找到了一些历史记录。我删除了我尝试迁移的应用程序的记录 最近我放弃了让ALTERTABLE语句生成/运行,并放弃了表的原始版本。尽管manage.py migrate声明它正在应用迁移,但数据库没有任何变化 以下是我一直在尝试的步骤: 删除历史记录Django 1.7中的Django迁移检测到模型更改,但不会在迁移时应用它们,django,django-migrations,Django,Django Migrations,我一直在尝试使用1.7中的迁移来同步Django应用程序中的模型更改(postgres 9.1-如果您需要有关我的环境的更多详细信息,请告诉我),但是manage.py migrate似乎什么都不做,sqlmigrate也不发出任何SQL 我认为这可能适用于我的情况,我在数据库中的django_migrations表中找到了一些历史记录。我删除了我尝试迁移的应用程序的记录 最近我放弃了让ALTERTABLE语句生成/运行,并放弃了表的原始版本。尽管manage.py migrate声明它正在应用
rm -r myapp/migrations
../manage.py dbshell
myapp_db=> delete from django_migrations where app='myapp'
创建初始迁移
cp myapp/models.py.orig myapp/models.py
../manage.py makemigrations myapp
../manage.py migrate
cp myapp/models.py.new myapp/models.py
../manage.py makemigrations myapp
manage.py migrate返回以下内容:
....
Running migrations:
Applying myapp.0001_initial... FAKED
然后我交换新模型并生成新的迁移
cp myapp/models.py.orig myapp/models.py
../manage.py makemigrations myapp
../manage.py migrate
cp myapp/models.py.new myapp/models.py
../manage.py makemigrations myapp
makemigrations的结果在myapp/migrations/0002_notificationlog.py中:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='NotificationLog',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('tstamp', models.DateTimeField(help_text=b'Log time', auto_now_add=True)),
('recipient', models.CharField(max_length=100)),
('subject', models.TextField()),
],
options={
},
bases=(models.Model,),
),
]
运行此迁移:
../manage.py migrate
manage.py migrate的行为就像一切正常一样:
....
Running migrations:
Applying myapp.0002_notificationlog... OK
我可以看到日志条目出现在django_迁移中,但没有创建表
我迷路了。你知道下一步该怎么做吗
更新
当按要求运行migrate-v3时,我看到
Running pre-migrate handlers for application auth
然后是每个已安装应用程序的类似行
然后
共重复13次,非托管应用程序的数量减少
然后
接
Running post-migrate handlers for application auth
每个已安装的应用程序都有一个类似的行
对于迁移0002,输出是相同的,除了
Running migrations:
Applying myapp.0002_notificationlog... OK
还要注意,sqlmigrate也不会输出任何内容:
../manage.py sqlmigrate myapp 0002 -v 3
什么也不生产
更新2
我将myapp复制到一个新项目中,并能够在其上运行迁移,但当我导入主项目设置时,迁移停止工作。我是否应该注意可能影响迁移执行的设置,特别是如果我在Django的早期版本中使用了South 通用项目设置的问题消失了,而我的旧的复杂项目设置又重新出现了问题。我跟踪到一个数据库路由器类,该类缺少
allow\u migrate
方法
DATABASE_ROUTERS = [ 'myproj.routers.DatabaseAppsRouter', ]
我使用这个路由器来处理项目中一个单独应用程序的查询(readonly/MySQL)
可悲的是,除了我自己,我不能责怪任何人,因为国家清楚地表明:
请注意,迁移不会在[allow_migrate]返回False的模型上执行任何操作
我不久前创建了这个路由器,当我升级到Django 1.7时,没有将
allow\u migrate
方法添加到我的路由器类中。当我添加该方法并确保它在需要时返回True
时,运行迁移并解决问题。所有这些步骤最初都在Django 1.7上执行,然后在1.7.1上重新测试。再次运行该过程,但使用/manage.py migrate-v3
。这样可以打印出更多的信息。请在您的问题中包含这些信息。我更新了结果,但输出的结果不太有启发性。我想我要用相同的模型创建一个新项目,看看它是否与我的环境有关。删除.pyc文件可能吗?这还不够