Python 使用Django 1.8和syncdb/migrate验证用户错误

Python 使用Django 1.8和syncdb/migrate验证用户错误,python,django,buildout,django-syncdb,django-1.8,Python,Django,Buildout,Django Syncdb,Django 1.8,升级到Django 1.8(使用zc.buildout)并运行syncdb或migrate时,我收到以下消息: django.db.utils.ProgrammingError:关系“auth\u user”不存在 我的一个模型包含django.contrib.auth.models.User: user = models.ForeignKey( User, related_name='%(app_label)s_%(class)s_user', blank=True, null

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

django.db.utils.ProgrammingError:关系“auth\u user”不存在

我的一个模型包含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中以不同的方式包含用户对象?

尝试引用使用此选项的用户

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)

为了解决这个问题,我做了以下工作:

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

'auth.User'
2) 对于具有上述功能的所有模型,请确保这些模型具有有效的django迁移(而不是南方迁移)。如果他们有南迁移,请将目录重命名为migrations\u south,然后为该应用程序运行makemigrations命令:

./manage.py makemigrations affected_app
有时,django migrations文件夹的名称不同,而不是默认的
migrations
目录。在这种情况下,请通过设置中的
MIGRATION\u MODULES
引用此选项。py:

MIGRATION_MODULES = {'filer': 'filer.migrations_django'}
由于在大型项目中很难找到该问题,我在settings.py中的
INSTALLED_apps
中注释掉了所有自定义应用,并运行了test命令,因为它将运行migrate并尝试为您重新创建数据库:

./manage.py test
看来我已经修好了。我不确定第一步是强制性的还是仅仅是最佳实践。但你肯定需要将应用程序转换为迁移

干杯


还有,准备好迎接即将到来的挑战。syncdb命令将被删除。删除了不进行迁移而同步应用程序的旧方法,所有应用程序都必须进行迁移。

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

python manage.py migrate auth
python manage.py migrate

在我的环境中,我在所有与
django.contrib.auth.models
有关系的应用程序上运行
makemigrations
来修复此问题:

manage.py makemigrations app_with_user_relation manage.py migrate 使用用户关系管理.py makemigrations应用程序 manage.py迁移
如果你像我一样使用heroku

heroku run python manage.py makemigrations
这可能会给你一个信息,说现在有变化。忽略这一点,然后运行

heroku run python manage.py migrate
这将为您提供一些输出,提示您已经完成了某些操作。 最后运行

heroku run python manage.py createsuperuser

通过对所有尚未迁移的应用程序运行“makemigrations”(即在迁移目录中尚未包含“initial_0001.py”文件的应用程序)可以解决此问题

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

manage.py makemigrations app_name
完成后,您可以执行:

manage.py migrate
像往常一样

其根本原因是出于某种原因

manage.py makemigrations
如果尚未创建这些初始迁移,则不总是创建它们。这导致了上述错误

相反,

manage.py makemigrations app_name

始终创建它们(如果尚未创建)。不幸的是,我无法理解这种不对称性的原因。

我已经将一个旧的Django 1.6项目迁移到Django 1.8,之前我们使用syncdb迁移数据库,我们没有为项目中的所有应用程序提供初始迁移步骤。使用Django 1.8,您将需要一个可运行的数据库迁移。运行

manage.py makemigrations <app_name>
manage.py makemigrations

对于我们项目中的所有应用程序,修复了我们的问题。

也许您已经找到了答案并解决了问题,但我想指出的是,在我的情况下,上述问题是通过删除数据库并重新创建来解决的,并且拥有用户的全部权限。我之所以能够这样做是因为我在非生产环境中工作,但在登台环境中这样做不是一个好主意,所以要小心

我使用的是
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

不适合我。我没有迁移,只是尝试运行./manage.py测试,迁移运行时会立即失败:django.db.utils.ProgrammingError:关系“auth_user”不存在修复方法是让依赖外键的模型也在迁移下进行验证。由于Django 1.9中没有syncdb,因此总体上是良好的做法。在已安装的应用程序中,您的身份验证应用程序应该已经接近顶部,即“Django.contrib.admin”,如果其顺序正确,则上述内容不会产生任何影响。我得到的
关系“Django\u站点”不存在
。我在django 1.8.2上。我在我的项目中尝试了几个不同的应用程序,但总是出现相同的错误,然后我再次运行了
python manage.py migrate
,你瞧,它成功了。在我的环境中,这种情况只发生在使用
Postgre
时。我遇到了同样的问题,这个解决方案也成功了。通过从Django 1.7.X到1.8.1I,我可以确认它仍然有效,并且可以与Heroku一起使用。这个解决方案在D2.2中对一个非常不相关的问题有效。正在尝试运行单元测试,但不断出现此错误。结果发现,用户应用程序中的迁移暂停,需要手动运行(即,
makemigrations users
),突然我的单元测试模块开始运行。您在哪个目录下运行该命令?我收到错误“无法打开文件manage.py”。您应该在包含文件“manage.py”的目录中运行该命令。您可以尝试以下两种替代方法:1)使用点斜杠作为命令的前缀,如:“./manage.py makemigrations”或2)使用python可执行文件作为前缀,如:“python manage.py makemigrations”。祝你好运。但它位于哪里?在与你的应用程序目录所在的目录相同的目录中,请参阅此处以获取目录布局(我无法将其粘贴到此处),查找“创建项目”:。如果你没有了,你应该把它换掉。顺便说一句:您也可以使用“django admin”,它应该位于您的Python路径中,另请参见:非常感谢您对“cavpollo”的更正。它看起来确实更好。删除并重新创建数据库是唯一有效的方法