【问题标题】:Django: relation "django_site" does not existDjango:关系“django_site”不存在
【发布时间】:2014-07-18 12:13:30
【问题描述】:

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

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

我不确定这里出了什么问题。我做了一些研究并将" 'django.contrib.sites'," 添加到我安装的应用程序中,但我仍然收到错误消息。我会缺少一个额外的步骤。有什么建议或意见吗?

【问题讨论】:

  • 您在更改设置后是否运行python manage.py syncdb
  • python manage.py syncdb 已被 django 1.11 弃用(我认为 1.9 或 1.10 也是如此)。在makemigrations 之后使用python manage.py migrate 代替

标签: python django


【解决方案1】:

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

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

【讨论】:

  • 这成功了!我已经有了SITE_ID = 1,所以投票最高的答案对我不起作用
  • 我同意你的观点@HammanSamuel 我见过许多对我来说从来没有用过的解决方案,但我一直想知道为什么它们被接受了。再想一想,我觉得 SITE_ID=1 曾经在旧版本的 Djangon 中工作。然而,截至本文发表时,这在最新的 Django 1.9 上实现了魔法
  • 也有这个问题,为我解决的是将 django_livesettings 更新到最新版本。正在升级到 django 1.8.12 当我的测试停止工作并在运行测试数据库迁移时指责FOREIGN KEY (site_id) REFERENCES django_site` (id)`。
  • 我最近遇到了一个类似的问题,虽然它是在对这个解决方案运行测试时不起作用。最后,我发现我安装的应用程序中缺少“allauth.socialaccount”应用程序。我不知道为什么它突然开始发生了。
【解决方案2】:

您可能在创建站点模型之前(在同步数据库或迁移之前)调用站点对象

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

【讨论】:

  • 很好,谢谢。在我的开发网站上,我启用了网站框架,让一些代码正常工作,一切都很好。将其推送到实时站点并收到此错误。我不得不注释掉与站点相关的代码,推送到 live,运行迁移,取消注释站点相关的代码,然后再次推送到 live。呸!
  • @PhilGyford 真的很痛苦!
  • 这是一个很好的观点,只是导致:始终仔细阅读堆栈跟踪:-D
【解决方案3】:

我也遇到了同样的问题,这样解决了:

  1. SITE_ID=1 添加到settings.py
  2. 运行这个命令:

    python manage.py migrate
    

【讨论】:

  • 这不能解决我的问题。我已经在设置中有 SITE_ID。
【解决方案4】:

我在使用 django-cookiecutterdjango-allauthdjango-rest-auth 时遇到此错误

我确实花了 5 个小时来拔头发。最终让步了,开始一点一点的注释掉

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

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

之后迁移工作。

我取消了它的注释,从那以后我的应用程序就一直在运行。仅用于初始迁移

希望它对某人有所帮助!

【讨论】:

    【解决方案5】:

    对我来说,一个可怕的代码导致了这个错误。我有一个全局变量来获取当前站点

    SITE = Site.objects.get(pk=1)

    这是在迁移过程中进行评估并导致错误的。

    【讨论】:

      【解决方案6】:

      此问题可能是由您正在使用的应用程序之一引起的。如果您仔细检查回溯,您可能已经找到了违规者。

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

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

      尝试按照以下步骤进行显式设置:http://django-debug-toolbar.readthedocs.org/en/1.2.2/installation.html#explicit-setup

      或者从您的INSTALLED APPS 中删除debug_toolbar

      如果这没有帮助,或者如果另一个应用程序导致了问题,请尝试暂时删除所有导入(例如已安装的应用程序、网址、自定义视图、设置),它们会显示在回溯中。

      【讨论】:

        【解决方案7】:

        将这里留给未来的我:

        python manage.py makemigrations allauth

        这对我有用,我忘记了原因,花了我太长时间才弄清楚我第一次是如何解决这个问题的

        编辑:makemigrations 有时不会制作像我的一些项目使用的 allauth 之类的第 3 方,所以我必须指定那些

        【讨论】:

          【解决方案8】:

          我在为我的项目(使用百日草)创建一个新的空数据库时遇到了同样的问题

          在“管理迁移”之前运行“管理迁移站点”并没有解决任何问题。似乎在创建任何表之前加载了完整的项目。

          我决定捕捉导入百日草相关应用程序产生的错误。

          例如: 在应用程序的 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 = []
          

          不得不在该应用的其他地方做类似的事情,然后“管理迁移”再次起作用。

          【讨论】:

            【解决方案9】:

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

            heroku run python manage.py migrate

            这对我有用

            【讨论】:

              【解决方案10】:

              我迟到了,但我在 django v 1.11 上遇到了同样的问题。

              问题是我在常规 def() 和 form() 之外重建模型 [我使用模型进行选择] 回溯应该列出 .py 文件

              例如

               File "filepath/views.py", line 67, in <module>
                  some_variable = some_model.objects.get(name ='name')
              

              所以我不得不将其注释掉以重建我的迁移

              【讨论】:

                【解决方案11】:

                这基本上是数据库错误,我这次可以解决这个问题,数据库是否存在?为什么我不知道你是否知道 找到并删除它Site.objects.get_current() 如果您知道,请评论它,并且在您运行 ./manage.py migrate [step:2] 之后,我会说它已经存在。所以我做了./manage.py migrate --fake [step:3]

                [步骤:1]

                su postgres
                psql -U <username> -d <database>
                SELECT * FROM django_site;
                
                CREATE TABLE django_site(
                id serial PRIMARY KEY,domain VARCHAR (50) NULL,
                name VARCHAR (50) NULL);
                
                INSERT INTO django_site VALUES('1','mysite.com', 'mysite');
                
                \q
                

                在您从管理员输入更改 mysite.com 值之后。

                【讨论】:

                • Site.objects.get_current() 为我创造了问题。它有助于从管理员获取域和编辑域名。
                【解决方案12】:

                我刚重新启动计算机,问题就消失了 :) (重启 docker-compose 还不够)。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-02-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-06-29
                  • 2017-07-05
                  • 2019-08-02
                  • 2016-01-05
                  相关资源
                  最近更新 更多