Django 1.8和syncdb / migrate的auth_user错误

时间:2015-04-17 02:46:28

标签: python django buildout django-syncdb django-1.8

升级到Django 1.8(使用zc.buildout)并运行syncdb或migrate时,我收到此消息:

django.db.utils.ProgrammingError: relation "auth_user" does not exist

我的一个模型包含django.contrib.auth.models.User:

user = models.ForeignKey(
    User, related_name='%(app_label)s_%(class)s_user',
    blank=True, null=True, editable=False
)

降级到Django 1.7可以消除错误。我是否必须在Django 1.8中以不同方式包含User对象?

9 个答案:

答案 0 :(得分:96)

我通过首先运行auth,然后运行其余的迁移来解决此问题:

python manage.py migrate auth
python manage.py migrate

答案 1 :(得分:18)

在我的环境中,我修复了与android:spinnerStyle="@android:style/Widget.Spinner.DropDown" 有关系的所有应用上运行makemigrations

manage.py makemigrations app_with_user_relation
manage.py migrate

答案 2 :(得分:17)

我也有同样的问题,我用这些解决了它:

python manage.py migrate auth
python manage.py migrate

然后迁移完成它的工作

答案 3 :(得分:7)

如果你像我一样使用heroku

heroku run python manage.py makemigrations

这可能会给你一条消息,说现在有变化。忽略然后运行

heroku run python manage.py migrate

这会给你一些表明已完成某些事情的输出。 最后运行

heroku run python manage.py createsuperuser

答案 4 :(得分:7)

通过为尚未迁移的所有应用运行“makemigrations”来包含此问题,即在迁移目录中尚未包含“initial_0001.py”文件的应用。

通过运行以下每个应用程序来完成(在我们的例子中,我们使用makefile):

manage.py makemigrations app_name

完成后,您可以执行:

manage.py migrate
像往常一样。

导致这种情况的根本原因是出于某种原因

manage.py makemigrations

如果总是创建这些初始迁移(如果它们尚未存在)。这导致了上述错误。

相反,

manage.py makemigrations app_name

总是创建它们(如果还没有)。不幸的是,我无法理解这种不对称的原因。

答案 5 :(得分:4)

要解决这个问题,我就是这样做的:

1)查找项目中的所有外键关系字段,如OneToOneField,ForeignKey和ManyToManyFields,包括引用auth.User或导入用户的任何可重用应用程序,并将其设置为settings.AUTH_USER_MODEL,如上所述。至少使用:

'auth.User'

2)对于具有上述内容的所有模型,请确保模型具有有效的django迁移(不是南方)。如果他们有南迁移,请将目录重命名为migrations_south,然后为该应用程序运行makemigrations命令:

./manage.py makemigrations affected_app

有时,django迁移文件夹的名称不同,而不是默认的migrations目录。在这种情况下,请通过settings.py中的MIGRATION_MODULES引用此内容:

MIGRATION_MODULES = {'filer': 'filer.migrations_django'}

由于在较大的项目中很难找到问题,我在settings.py中的INSTALLED_APPS中注释掉了所有自定义应用并运行了test命令,因为它将运行migrate并尝试重新创建数据库你:

./manage.py test

看起来像是为我修好了。我不确定步骤1是强制性的还是最佳做法。但您肯定需要将应用程序转换为迁移。

干杯!

PS。为Django 1.9中的内容做好准备。 syncdb命令将被删除。删除了没有迁移的同步应用程序的传统方法,并且所有应用程序都必须进行迁移。

答案 6 :(得分:0)

尝试使用此

引用用户
from django.conf import settings
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='%(app_label)s_%(class)s_user', blank=True, null=True, editable=False)

答案 7 :(得分:0)

我已将旧的Django 1.6项目迁移到Django 1.8,之前我们已使用syncdb迁移数据库,我们为所有应用程序执行了没有初始迁移步骤项目。使用Django 1.8,您需要进行有效的数据库迁移。正在运行

manage.py makemigrations <app_name>

我们项目中的所有应用都解决了我们的问题。

答案 8 :(得分:0)

也许你找到了答案并解决了问题,但我想指出,在我的情况下,通过删除数据库并再次使用用户的完全权限重新创建它来解决上述问题。我能够做到这一点是因为我在非生产环境中工作,但在暂存环境中这样做并不是一个好主意,所以要小心。

我正在使用python 2.7.12以下是我的virtualenv的规格:

Django==1.10.5
django-crispy-forms==1.6.1
django-registration-redux==1.4
djangorestframework==3.5.3
olefile==0.44
packaging==16.8
Pillow==4.0.0
psycopg2==2.6.2