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类中添加的属性相同。

  1. 删除与您添加的属性具有相似名称的方法。
  2. manage.py makemigrations my_app
  3. manage.py迁移my_app
  4. 添加方法。

这是一个愚蠢的错误,但在模型类的字段声明行末尾添加逗号,使行不起作用。

它发生在你复制粘贴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,出于某种原因,我从未抓到过最初的迁移。

像我这样不喜欢迁移的人可以使用下面的步骤。

  1. 删除要更改的内容。
  2. 运行python manage.py makemigrations app_label进行初始迁移。
  3. 在进行更改之前,运行python manage.py migrate来创build表。
  4. 粘贴您在第一步移除的更改。
  5. 运行2.和3.步骤。

如果您对这些步骤感到困惑,请阅读迁移文件。 更改它们以更正模式或删除不需要的文件,但不要忘记更改下一个迁移文件的依赖关系部分;)

我希望这将有助于未来的人。

以下为我工作:

  1. 将应用程序名称添加到settings.py
  2. 使用“python manage.py makemigrations”
  3. 使用“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文件夹运行makemigrationsmigrate
它仍然说: 没有迁移申请。

我去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了序列化器类和视图的两个表。 所以当我想更新时,我有这个错误。

我遵循这个步骤:

  1. 我做了.\manage.py makemigrations app
  2. 我执行了.\manage.py migrate
  3. 我删除了我的models.py两个表
  4. 我从序列化程序和视图类中删除了所有对表的引用。
  5. 我执行了第1步和第2步。
  6. 我只是在models.py检索了我的更改
  7. 我再次执行第5步。
  8. 我恢复了所有的改变。

如果你正在使用Pycharm,本地历史是非常有用的。

也许这会帮助别人。

我删除了我的models.py和期望的makemigrations来创buildDeleteModel语句。

请记得删除*.pyc文件!

 ./manage makemigrations ./manage migrate 

迁移跟踪对数据库的更改,所以如果要从非托pipe更改为托pipe,则需要确保您的数据库表是与正在处理的模型相关的最新数据表。

如果您仍处于开发模式,我个人决定删除IDE中的迁移文件以及与我的模型相关的django_migrations表,然后重新运行上述命令。

请记住:如果您的数据库中的IDE和_003中的迁移以_001结尾。 Django只会查看是否有以_004结尾的任何更新的迁移。

2(代码和数据库迁移)是链接和协同工作。

快乐的编码。

这可能由于以下原因而发生:

  1. 您没有在settings.py INSTALLED_APPS列表中添加该应用程序(您必须将应用程序名称或虚线path添加到应用程序文件夹中apps.py的AppConfig子类,具体取决于您使用的django版本) 。 请参阅文档: INSTALLED_APPS
  2. 这些应用程序中没有migrations文件夹。 (解决scheme:只需创build该文件夹)。
  3. 这些应用程序的migrations文件夹内没有__init__.py文件。 (解决scheme:只需创build一个名为__init__.py的空文件)
  4. 应用程序文件夹内没有__init__.py文件。 (解决scheme:只需创build一个名为__init__.py的空文件)
  5. 您的应用中没有models.py文件
  6. models.py中的Python类(应该是模型)不会inheritancedjango.db.models.Model
  7. 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...行解决了问题!