Django 1.7 - 应用程序'your_app_name'没有迁移

Posted

技术标签:

【中文标题】Django 1.7 - 应用程序\'your_app_name\'没有迁移【英文标题】:Django 1.7 - App 'your_app_name' does not have migrationsDjango 1.7 - 应用程序'your_app_name'没有迁移 【发布时间】:2014-12-29 18:31:41 【问题描述】:

我正在尝试从 Django 1.6.7 升级到 Django 1.7.1,所以我一直在尝试迁移我的应用程序。

我关注了django docs here。

我从已安装的应用程序中删除了南。

在迁移目录中,我删除了编号的迁移文件和 .pyc 文件,但我保留了目录和 __init__.py 文件。

然后我运行:

python manage.py makemigrations your_app_name

我收到以下确认消息:

Migrations for 'your_app_name':
  0001_initial.py:
    - Create model UserProfile

接下来我运行:

python manage.py migrate your_app_name

我收到以下错误:

CommandError: App 'your_app_name' does not have migrations (you cannot selectively sync unmigrated apps)

根据文档,我也跑了:

python manage.py migrate --fake your_app_name

我收到了同样的错误信息:

CommandError: App 'your_app_name' does not have migrations (you cannot selectively sync unmigrated apps)

谁能解释一下为什么这对我不起作用?

【问题讨论】:

makemigrations 是否在您的migrations 文件夹中创建了新文件? 是的。新文件名为 0001_initial 【参考方案1】:

我注意到,只有那些实际包含 migrations 文件夹且包含文件 __init__.py 的应用程序才能被迁移识别。 IE 在你的应用中只有 models.py 是不够的。

【讨论】:

【参考方案2】:

如果您只有一个应用,则在不指定应用或迁移的情况下运行 migrate 可能会起作用。

如果是这样,首先要检查的是您的应用名称是否与您在 INSTALLED_APPS 下的 settings.py 中指定的名称匹配。

正如 cmets 中所指出的,应用名称可以采用 [parent_app].[app_name] 的形式。在这种情况下,迁移只需要 [app_name]。

【讨论】:

第二部分可能会让来到这里的人有点困惑,因为安装的应用程序名称可能是 '[parent_app].[app_name]' 而 migrate.py 命令只需要 [app_name] .令人困惑的是,可能会出现与原始海报相同的错误。 谢谢@TheCardCheat!我在使用parent_app.app_name 却一无所获。【参考方案3】:

您的应用必须包含一个models.py 文件(甚至是 emtpy)。

来源:https://groups.google.com/forum/#!msg/django-users/bsTZEmxgDJM/wH0p3xinBWIJ

【讨论】:

【参考方案4】:

只是提到另一个可能的原因:

在我的 Django 应用程序中,我添加了正确的迁移并使用 pip 安装了应用程序并得到了同样的错误。

我缺少的是正确的 MANIFEST.in 文件 setup.py 文件中 setup() 中的参数 include_package_data 也未设置为 True

【讨论】:

以上是关于Django 1.7 - 应用程序'your_app_name'没有迁移的主要内容,如果未能解决你的问题,请参考以下文章

在为 Django 1.6 和 1.7 设计应用程序时,是不是有推荐的处理 AppConfig 的方法?

为单个 Django 1.7 应用程序重新创建表

我的旧项目出现 Django 1.7 迁移问题

Django 1.7 - makemigrations 为非托管模型创建迁移

Django 1.7 中的迁移

Django 1.7 和 1.8 之间迁移行为的变化