Django:关系"django_site"不存在。

39
我正在AWS上运行一个测试Django服务器,我刚刚安装了django-userena,当我尝试注册一个用户并单击提交时,会收到以下消息:

关系“django_site”不存在 第1行: ……“django_site”。 “domain”,“django_site”。 “name” FROM“django_si……


我不太确定出了什么问题。我进行了一些研究,并将"'django.contrib.sites',"添加到我的已安装应用程序中,但我仍然收到错误。我想我可能漏掉了一步。有任何建议或意见吗?

6
在更改设置后,你是否运行了python manage.py syncdb - Platinum Azure
1
python manage.py syncdb已经在Django 1.11 (以及我认为的1.9或1.10)中不再使用了。请在 makemigrations 后使用 python manage.py migrate - chris Frisina
13个回答

54

最近我在使用 Django 1.8.7 时遇到了这个问题,即使在我的设置中已经设置了 SITE_ID = 1。在进行任何其他迁移之前,我不得不手动迁移 sites 应用程序:

./manage.py migrate sites
./manage.py migrate

2
这个方法奏效了!我已经设置了 SITE_ID = 1,所以得票最高的答案对我不起作用。 - Hamman Samuel
1
我同意你的看法,@HammanSamuel。我曾经看到很多解决方案,但从未对我起作用,但我一直在想为什么它们被接受了。后来我想到,在旧版本的Django中,SITE_ID=1曾经有效。然而,在最新的Django 1.9中,这个方法确实奏效了,至少在我发表评论时是这样的。 - Paullo
我也遇到了这个问题,解决方法是将django_livesettings更新到最新版本。我们正在升级到django 1.8.12时,我的测试停止工作,并在运行测试数据库的迁移时指责FOREIGN KEY(site_id) REFERENCES django_site (id) - Gesias
最近我遇到了类似的问题,尽管是在运行测试时,但这个解决方案并没有起作用。最终我发现我没有将'allauth.socialaccount'应用程序添加到我的已安装应用程序中。虽然我不知道为什么它突然开始出现这种情况。 - Simon

11

您可能在创建站点模型之前调用了站点对象(在syncdb或migrate之前)

例如:site = Site.objects.get(id=settings.SITE_ID)


2
好的,谢谢提醒。在我的开发网站上,我启用了站点框架,让一些代码正常运行,一切都很好。但是当我将其推送到线上网站时,出现了这个错误。我不得不注释掉与站点相关的代码,将其推送到线上,运行迁移,取消注释站点相关的代码,然后再次推送到线上。真是太辛苦了! - Phil Gyford
@PhilGyford 真是个烦人的问题! - joshlsullivan
这是一个非常好的观点,简单地导致:一定要仔细阅读堆栈跟踪信息 :-D - normic

10

我有同样的问题,并且像这样解决它:

  1. SITE_ID=1 添加到 settings.py
  2. 运行以下命令:

    python manage.py migrate
    

9
这个并不能解决我的问题。我已经在设置中设置了SITE_ID。 - KhoPhi
解决了。我是通过docker-compose在Docker中运行Postgres和Django的。 - zsega

3

我在使用 django-cookiecutter, django-allauthdjango-rest-auth 时遇到了这个错误。

我花费了五个小时的时间,并开始逐步注释代码,终于找到了解决方案。

对我有用的是注释掉两个预配置的URL路径(它们随cookiecutter Django一起提供):

# User management
path("users/", include("yourapp.users.urls")),
path("accounts/", include("allauth.urls")),

此后迁移工作正常。

我取消了注释,自那以后我的应用程序一直在运行。这仅适用于最初的迁移。

希望能对某些人有所帮助!


2

如果您在将Django应用程序部署到Heroku时遇到此错误,请确保已运行:

heroku run python manage.py migrate

这对我起作用了。


2

为了方便将来的我,我把这里留下:

python manage.py makemigrations allauth

这个命令适用于我的情况,但是我忘记了原因,花费了我很长时间来找出我第一次是如何解决的。

编辑:有时候makemigrations无法包括第三方库比如allauth,而我的一些项目需要它们,所以我必须指定这些库。


1
今天我将代码推到Heroku后遇到了同样的问题...所以我发现在进行任何其他迁移之前必须要先迁移我的网站。
heroku run python manage.py migrate sites
heroku run python manage.py migrate

1

这个问题可能是由你使用的某个应用程序引起的。如果你仔细检查回溯,你可能已经找到了罪犯。

我在使用 django-debug-toolbarzinnia 时遇到了这些问题。

如果你正在使用 django-debug-toolbar,这可能是一个解决方案:

尝试按照明确的设置步骤进行操作: http://django-debug-toolbar.readthedocs.org/en/1.2.2/installation.html#explicit-setup

或者从 INSTALLED APPS 中删除 debug_toolbar

如果这不起作用或者另一个应用程序导致了问题,请尝试暂时删除在回溯中显示的所有导入(例如安装的应用程序、urls、自定义视图、设置)。


1
一个可怕的代码导致了我的错误。我有一个全局变量来获取当前站点。 SITE = Site.objects.get(pk=1) 这在迁移期间被评估并导致了错误。

1
我在为我的项目创建一个新的空数据库时,遇到了同样的问题(该项目使用zinnia)。在运行'manage migrate'之前运行'manage migrate site'没有解决任何问题。似乎在创建任何表之前,完整的项目都已被加载。我决定捕获导入zinnia相关应用程序产生的错误。例如:在应用程序的urls.py中。
urlpatterns = None
app_name = 'something'

try:
    from .views import MyEntryCreate


    urlpatterns = [

    url(r'^blogentry/create/$',
        login_required(MyEntryCreate.as_view()),
        name='zinnia_entry-add'),

    ]
except Exception as e:
    logger.error(app_name+" Error urls: "+str(e))
    urlpatterns = []

在该应用程序的其他地方需要执行类似的操作,“manage migrate”再次起作用。


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