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

Posted

技术标签:

【中文标题】我的旧项目出现 Django 1.7 迁移问题【英文标题】:Django 1.7 Migrations issue with my old project 【发布时间】:2015-01-02 12:54:56 【问题描述】:

我有一个 django 1.5 应用程序,现在我将它迁移到 django 1.7 并且应用程序在旧数据库上运行良好。但现在我想使用 django 1.7 为该应用创建迁移。

我删除了旧的迁移,只保留了带有 __ init__ 文件的迁移文件夹

然后我跑了./manage.py makemigrations

在运行 ./manage.py migrate 时会出现一些错误。

django.db.utils.ProgrammingError: relation "django_site" does not exist
LINE 1: SELECT (1) AS "a" FROM "django_site" LIMIT 1

我已将 django_sites 添加到已安装的应用程序中。

在更新到本机迁移时,是否有任何特定的方式来创建/应用迁移?

【问题讨论】:

【参考方案1】:

您有一个依赖于 django.contrib.site 的迁移,但相关的表不可用。 你可以

在 INSTALLED_APPS 中将 django.contrib.site 向上移动 检查您的迁移的属性dependencies

无论如何,我认为您的问题在于某些字段的默认值。

如果您没有找到相关的应用程序,您可以:

    禁用 INSTALLED_APPS 中的所有应用程序 启用第一个 运行 makemigrations 删除所有迁移 启用下一个应用程序 运行 makemigrations ...重复步骤 4..6,直到出现错误

【讨论】:

【参考方案2】:

来自the documentation:

如果您已经使用 South 创建了预先存在的迁移,那么使用 django.db.migrations 的升级过程非常简单:

确保所有安装都与它们的迁移完全同步。 从 INSTALLED_APPS 中删除“南”。 删除所有(编号的)迁移文件,但不要删除目录或 init.py - 确保也删除 .pyc 文件。 运行 python manage.py makemigrations。 Django 应该看到空的迁移目录并以新格式进行新的初始迁移。 运行 python manage.py 迁移。 Django 将看到初始迁移的表已经存在,并将它们标记为已应用而不运行它们。

我怀疑你忘了

find . -iname "*.pyc" | xargs rm

【讨论】:

以上是关于我的旧项目出现 Django 1.7 迁移问题的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.7 内置迁移与南迁移?

Django 1.7 - 创建初始迁移

Django 1.7 中的迁移

在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?

Django 1.7 + Django CMS - 从我的仓库中删除迁移文件或在仓库中包含 virtualenv?

makemigrations 和升级到 Django 1.7 的问题