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

21

我正在尝试将Django 1.6.7升级到Django 1.7.1,因此我一直在尝试迁移我的应用程序。

我遵循了这里的django文档

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

在迁移目录中,我删除了编号的迁移文件和.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文件夹中创建了一个新文件吗? - Chillar Anand
是的。新文件名为0001_initial。 - user1261774
5个回答

31

我注意到只有那些实际包含migrations文件夹和一个__init__.py文件的应用程序才被迁移识别。如果你的应用程序只有models.py是不够的。


16

如果您只有一个应用程序,运行 migrate 命令而不指定应用程序或迁移可能会起作用。

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

正如评论中指出的那样,应用程序名称可以采用 [parent_app].[app_name] 的形式。在这种情况下,migrate 命令只需要 [app_name]。


4
第二部分可能会让来到这里的人有点困惑,因为已安装的应用程序名称可能是“[parent_app] . [app_name]”,而 migrate.py 命令只需要 [app_name]。这种混淆可能会导致与原始帖子相同的错误。 - Jmills
2
谢谢您,@TheCardCheat!我一直在使用parent_app.app_name,但是没有进展。 - annapetry

9

3

还有可能的原因是:

在我的Django应用程序中,我添加了正确的迁移并使用pip安装了该应用程序,但仍然遇到相同的错误。

我缺少一个正确的MANIFEST.in文件。另外,在setup.py文件的setup()函数中,参数include_package_data没有设置为True


0
请确保以下事项:
  1. 确认 'app_name.apps.AppNameConfig' 已添加到已安装应用程序的列表中。
  2. settings.py 文件中再次检查项目的数据库配置。
  3. 确保每个应用程序都包含一个名为 migrations 的目录,并在该目录中有一个名为 __init__.py 的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接