我试图使用makemigrations命令在现有的应用程序中创建迁移,但它输出“未检测到更改”。

通常我使用startapp命令创建新的应用程序,但在创建这个应用程序时没有使用它。

调试后,我发现它没有创建迁移,因为迁移包/文件夹从应用程序中丢失。

如果文件夹不存在或者我遗漏了什么,如果它创建文件夹会更好吗?


当前回答

确保你的应用在settings.py中的installed_apps中被提及 确保建模类扩展了模型。模型

其他回答

要为应用程序创建初始迁移,请运行makemigrations并指定应用程序名称。迁移文件夹将被创建。

./manage.py makemigrations <myapp>

你的应用必须首先包含在INSTALLED_APPS中(在settings.py内部)。

我知道这是一个老问题,但我一整天都在和这个问题斗争,我的解决方法很简单。

我的目录结构是这样的……

apps/
   app/
      __init__.py
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

因为所有其他模型,直到我有一个问题,被导入到其他地方,最终从main_app导入,这是在INSTALLED_APPS注册的,我只是很幸运,他们都工作。

但是,由于我只将每个应用程序添加到INSTALLED_APPS,而不是app_sub*,当我最终添加一个新的模型文件时,没有导入到其他任何地方,Django完全忽略了它。

我的修复是添加一个models.py文件到每个应用程序的基本目录,就像这样…

apps/
   app/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app_sub1/
           __init__.py
           models.py
      app_sub2/
           __init__.py
           models.py
      app_sub3/
           __init__.py
           models.py
   app2/
      __init__.py
      models.py <<<<<<<<<<--------------------------
      app2_sub1/
           __init__.py
           models.py
      app2_sub2/
           __init__.py
           models.py
      app2_sub3/
           __init__.py
           models.py
    main_app/
      __init__.py
      models.py

然后从apps。app中添加。App_sub1 import *,以此类推到每个应用级models.py文件。

在那里……我花了很长时间才弄明白,我在任何地方都找不到解决方案……我甚至翻到了谷歌结果的第二页。

希望这能帮助到一些人!

你能做的最好的事情是,删除现有的数据库。在我的情况下,我使用phpMyAdmin SQL数据库,所以我手动删除创建的数据库在那里。

删除后: 我在PhpMyAdmin创建数据库,不添加任何表。

再次执行以下命令:

Python manage.py makemigrations

Python manage.py迁移

在这些命令之后:你可以看到django已经自动在数据库中创建了其他必要的表(大约有10个表)。

Python manage.py makemigrations <app_name>

Python manage.py迁移

最后:在以上命令之后,您所创建的所有模型(表)都直接导入到数据库中。

希望这能有所帮助。

更新:在尝试之前,应该确保migrations文件夹中存在__init__.py文件:

./manage.py makemigrations <myapp1> <myapp2>…< myappN >


有时。/manage.py makemigrations优于。/manage.py makemigrations <myapp>,因为它可以处理应用程序之间的某些冲突。

这些情况都是悄无声息地发生的,需要几个小时的咒骂才能理解可怕的“检测到没有变化”消息的真正含义。

因此,使用下面的命令是一个更好的选择:

./manage.py makemigrations <myapp1> <myapp2>…< myappN >

我读过很多关于这个问题的答案,通常都是简单地用其他方式进行移民。但对我来说,问题在于模型的Meta子类。

我有一个应用程序配置,说label = <应用程序名称>(在apps.py文件,旁边的models.py, views.py等)。如果你的元类没有与应用标签相同的标签(例如,因为你把一个太大的应用拆分成多个),就不会检测到任何变化(也不会有任何有用的错误消息)。所以在我的模型类中,我现在有:

class ModelClassName(models.Model):

    class Meta:
        app_label = '<app name>' # <-- this label was wrong before.

    field_name = models.FloatField()
    ...

运行Django 1.10。