Django 1.7 – makemigrations没有检测到变化
正如标题所说,我似乎无法获得迁移工作。
该应用程序最初是在1.6以下,所以我明白,迁移将不会在那里开始,事实上,如果我运行python manage.py migrate
我得到:
Operations to perform: Synchronize unmigrated apps: myapp Apply all migrations: admin, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Installing custom SQL... Installing indexes... Running migrations: No migrations to apply.
如果我对myapp
任何模型进行了更改,它仍然会如预期的那样表示没有偏移。
但是,如果我运行python manage.py makemigrations myapp
我得到:
No changes detected in app 'myapp'
似乎并不关心我运行该命令的方式,也不会检测到应用程序发生更改,也不会将任何迁移文件添加到应用程序中。
有什么办法强制一个应用程序迁移,基本上说:“这是我的基地工作”或任何东西? 还是我错过了什么?
我的数据库是PostgreSQL的,如果有帮助的话。
如果你正在从你在django 1.6中创build的应用程序进行转换,那么你需要在文档中列出一个前置步骤(正如我发现的那样):
python manage.py makemigrations your_app_label
文档没有说明你需要添加应用程序标签到命令中,因为它告诉你要做的第一件事就是将会失败的python manage.py makemigrations
。 最初的迁移是在1.7版本中创build你的应用程序时完成的,但是如果你是从1.6版本开始的,那么它将不会被执行。 请参阅文档中的“向应用程序添加迁移”以获取更多详细信息。
好吧,看起来我错过了一个明显的步骤,但张贴这个以防其他人也一样。
当升级到1.7时,我的模型变成了非托pipe( managed = False
) – 我以前的版本是True
,但似乎已经恢复。
删除该行(默认为True),然后立即运行makemigrations
了一个迁移模块,现在它正在工作。 makemigrations
在非托pipe表上不起作用(事后看来这是显而易见的)
我的解决scheme没有在这里覆盖,所以我张贴它。 我一直在使用syncdb
来完成一个项目,只是为了启动和运行。 然后,当我试图开始使用Django的迁移,它首先伪造他们然后会说这是'好',但没有发生数据库。
我的解决scheme是删除我的应用程序的所有迁移文件, 以及 django_migrations
表中应用程序迁移的数据库logging。
然后,我刚刚做了一个最初的迁移:
./manage.py makemigrations my_app
其次是:
./manage.py migrate my_app
现在我可以进行迁移没有问题。
同意@furins。 如果一切似乎都是按顺序出现的,但是出现这个问题,请检查是否有任何属性方法的标题与要在Model类中添加的属性相同。
- 删除与您添加的属性具有相似名称的方法。
- manage.py makemigrations my_app
- manage.py迁移my_app
- 添加方法。
这是一个愚蠢的错误,但在模型类的字段声明行末尾添加逗号,使行不起作用。
它发生在你复制粘贴def的时候。 从迁移,它本身被定义为一个数组。
虽然也许这会帮助某人:-)
也许这会帮助别人。 我正在使用嵌套的应用程序。 project.appname和我实际上有INSTALLED_APPS项目和project.appname。 从INSTALLED_APPS中删除项目允许检测到更改。
答案是在这个stackoverflow后,通过在Django 1.7中的 cdvv7788 迁移
如果这是您第一次迁移该应用程序,您必须使用:
manage.py makemigrations myappname一旦你这样做,你可以这样做:
manage.py migrate如果你在数据库中有你的应用程序,修改了它的模型,并且没有更新makemigrations上的变化,你可能还没有迁移它。 改变你的模型回到原来的forms,运行第一个命令(与应用程序的名称)并迁移…它会伪造它。 一旦你这样做把你的模型的变化放回原处,运行makemigrations并再次迁移,它应该工作。
我有完全相同的麻烦,完成上述工作。
我已经将我的django应用移至了cloud9,出于某种原因,我从未抓到过最初的迁移。
像我这样不喜欢迁移的人可以使用下面的步骤。
- 删除要更改的内容。
- 运行
python manage.py makemigrations app_label
进行初始迁移。 - 在进行更改之前,运行
python manage.py migrate
来创build表。 - 粘贴您在第一步移除的更改。
- 运行2.和3.步骤。
如果您对这些步骤感到困惑,请阅读迁移文件。 更改它们以更正模式或删除不需要的文件,但不要忘记更改下一个迁移文件的依赖关系部分;)
我希望这将有助于未来的人。
以下为我工作:
- 将应用程序名称添加到settings.py
- 使用“python manage.py makemigrations”
- 使用“python manage.py migrate”
为我工作:Python 3.4,Django 1.10
也许我为时已晚,但是您是否试图在您的应用中使用__init__.py
文件来创buildmigrations
文件夹?
您想检查INSTALLED_APPS
列表中的settings.py
,并确保所有带模型的应用程序都列在那里。
在项目文件夹中运行makemigrations
意味着它将更新与项目的settings.py
包含的所有应用程序有关的所有表。 一旦包含它, makemigrations
将自动包含应用程序(这节省了大量工作,所以您不必为项目/站点中的每个应用程序运行makemigrations app_name
)。
以防万一你有一个特定的字段不能被makemigrations识别:如果你有一个同名的属性,请检查两次。
例:
field = django.db.models.CharField(max_length=10, default = '', blank=True, null=True) # ... later @property def field(self): pass
该属性将“覆盖”字段定义,所以更改不会被makemigrations
识别
添加这个答案,因为只有这个方法帮助了我。
我删除了migrations
文件夹运行makemigrations
并migrate
。
它仍然说: 没有迁移申请。
我去migrate
文件夹,并打开最后创build的文件,
评论我想要的移民(它被发现并进入)
并再次运行migrate
。
这基本上是手动编辑迁移文件。
只有在了解文件内容的情况下才能这样做。
重命名旧迁移文件夹之后,是否使用了schemamigration my_app --initial
? 尝试一下。 可能工作。 如果没有 – 尝试重新创build数据库并进行syncdb +迁移。 它为我工作…
确保你的模型不是abstract
。 我其实犯了这个错误,花了一段时间,所以我想我会把它发布。
我有两次运行makemigrations和各种奇怪的行为的同样的问题。 事实certificate,问题的根源在于我使用了一个函数来设置我的模型中的默认date,所以每次运行makemigrations时迁移都会检测到更改。 这个问题的答案使我走上了正确的轨道: 避免makemigrations重新创builddate字段
我最近将Django从1.6升级到了1.8,并且为他们提供了很less的应用程序和迁移。 我用南方和schemamigrations
在Django 1.8中创build了Django 1.6中的迁移。
在升级后添加新模型时, makemigrations
命令未检测到任何更改。 然后我尝试了@drojf(第一个答案)build议的解决scheme,它工作正常,但未能应用假初始迁移( python manage.py --fake-initial
)。 我正在这样做,因为我的表(旧表)已经创build。
最后这个工作对我来说,从models.py删除新的模型(或模型的变化),然后删除(或重命名为安全备份)所有应用程序的迁移文件夹,并运行所有应用程序的python manage.py
makemigrations,然后做了python manage.py migrate --fake-initial
。 这工作像一个魅力。 一旦为所有应用程序创build了初始迁移并伪造了初始迁移,然后添加了新的模型,并按照常规的迁移过程进行makemigrations
并在该应用程序上迁移。 现在检测到的变化,一切都很顺利。
我只是想在这里分享它,如果有人面临同样的问题(对他们的应用程序有南方的schemamigrations
),它可能会帮助他们:)
也许这可以帮助别人,我也有同样的问题。
我已经创build了序列化器类和视图的两个表。 所以当我想更新时,我有这个错误。
我遵循这个步骤:
- 我做了
.\manage.py makemigrations app
- 我执行了
.\manage.py migrate
- 我删除了我的
models.py
两个表 - 我从序列化程序和视图类中删除了所有对表的引用。
- 我执行了第
1
步和第2
步。 - 我只是在
models.py
检索了我的更改 - 我再次执行第
5
步。 - 我恢复了所有的改变。
如果你正在使用Pycharm,本地历史是非常有用的。
也许这会帮助别人。
我删除了我的models.py
和期望的makemigrations
来创buildDeleteModel
语句。
请记得删除*.pyc
文件!
./manage makemigrations ./manage migrate
迁移跟踪对数据库的更改,所以如果要从非托pipe更改为托pipe,则需要确保您的数据库表是与正在处理的模型相关的最新数据表。
如果您仍处于开发模式,我个人决定删除IDE中的迁移文件以及与我的模型相关的django_migrations表,然后重新运行上述命令。
请记住:如果您的数据库中的IDE和_003中的迁移以_001结尾。 Django只会查看是否有以_004结尾的任何更新的迁移。
2(代码和数据库迁移)是链接和协同工作。
快乐的编码。
这可能由于以下原因而发生:
- 您没有在
settings.py
INSTALLED_APPS
列表中添加该应用程序(您必须将应用程序名称或虚线path添加到应用程序文件夹中apps.py的AppConfig子类,具体取决于您使用的django版本) 。 请参阅文档: INSTALLED_APPS - 这些应用程序中没有
migrations
文件夹。 (解决scheme:只需创build该文件夹)。 - 这些应用程序的
migrations
文件夹内没有__init__.py
文件。 (解决scheme:只需创build一个名为__init__.py的空文件) - 应用程序文件夹内没有
__init__.py
文件。 (解决scheme:只需创build一个名为__init__.py的空文件) - 您的应用中没有
models.py
文件 -
models.py
中的Python类(应该是模型)不会inheritancedjango.db.models.Model
- 在
models.py
中定义模型时有一些语义错误
添加我的2C,因为这些解决scheme都没有为我工作,但是这样做…
我刚刚运行了manage.py squashmigrations
并删除了旧的迁移(django.migrations数据库表中的文件和行)。
这在最后一个迁移文件中留下了这样的一行:
replaces = [(b'my_app', '0006_auto_20170713_1735'), (b'my_app', '0007_auto_20170713_2003'), (b'my_app', '0008_auto_20170713_2004')]
这显然混淆了Django并导致了怪异的行为:运行manage.py makemigrations my_app
将重新创build初始迁移,就像没有存在。 删除replaces...
行解决了问题!