Django DatabaseError:关系“django_site”

Posted

技术标签:

【中文标题】Django DatabaseError:关系“django_site”【英文标题】:Django DatabaseError: relation "django_site" 【发布时间】:2013-07-26 21:40:44 【问题描述】:

我目前有一个 django 应用程序正在我的 PC 上开发,数据在我的数据库中,但是当我尝试在测试服务器上运行此应用程序时,我收到以下错误

DatabaseError: relation "django_site" does not exist
LINE 1: ..."django_site"."domain", "django_site"."name" FROM "django_si...

谁能告诉我为什么会出现这个错误。谢谢

【问题讨论】:

你在测试服务器上同步数据库了吗? 是的,我确实同步了 be,当我收到该错误时,我也尝试运行 manage.py runserver,但错误仍然相同 您是否在 settings.py 中更改或不包含 SITE_ID 设置,以使 SITE_ID 与 django_site 表中的记录不相关? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

这个问题继续困扰着许多人,包括我自己。虽然是一个乏味的过程,但这种方法节省了我的脑力:

禁用 INSTALLED_APPS 中的所有外部应用,您自己的应用除外,如下所示:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django.contrib.flatpages',
    'main', # This is my own app.

    # 'compressor',
    # 'ckeditor',
    # 'imagekit',
    # 'debug_toolbar',
    # 'rest_framework',
    # 'allauth',
    # 'allauth.account',
    # 'allauth.socialaccount',

    # 'allauth.socialaccount.providers.google',
    # 'allauth.socialaccount.providers.facebook',
)

运行

python manage.py makemigrations
python manage.py migrate

然后,取消注释所有其他应用程序,然后重复 makemigrations 并在上面迁移。

这对我来说一直有效

【讨论】:

感谢上帝,不仅我有这个问题。【参考方案3】:

我看不到您的模型或您使用的应用程序,但我猜您正在使用 django_site(站点模型)并且您在 INSTALLED_APPS 中没有“django.contrib.sites”。

如果我是正确的,那么只需将'django.contrib.sites', 添加到您的INSTALLED_APPS

【讨论】:

我安装了 django.contrib.sites【参考方案4】:

在启动新数据库和使用 django-debug-toolbar 时遇到了这个奇怪的问题。将其从INSTALLED_APPS 中删除,并能够运行syncdb。然后重新添加了debug_toolbar,它仍然可以正常工作。

如果您使用的是 django-debug-toolbar,请尝试在已安装的应用中注释掉 debug_toolbar,然后重试。


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

【讨论】:

试过了,没用。我在 django 1.8 上并使用 postgresql【参考方案5】:

我有同样的问题,并像这样修复它:

    SITE_ID=1 添加到settings.py

    运行这个命令:

    python manage.py 迁移

【讨论】:

【参考方案6】:

无法以 django 方式解决此问题,因此我尝试使用 sql,我创建了一个像这样的数据库的转储。

pg_dump mypgdatabase | gzip -c > mypgdatabase.dump.out.gz

然后将其移至服务器

scp /path/to/mypgdatabase.dump.out.gz  my_remote_server

然后像这样在服务器上重新创建它

psql -d mypgdatabase -f mypgdatabase.dump.out

然后运行

./manange.py migrate --all

一切顺利。

【讨论】:

【参考方案7】:

您可以尝试和检查几件事:

你的settings.py 应该有一个SITE_ID 通常是= 1 在您的settings.py 中更改您的INSTALLED_APPS 的顺序并尝试暂时将项目注释掉。 正如 Geo 所说,在创建站点模型之前检查您没有调用站点对象(例如:site = Site.objects.get(id=settings.SITE_ID))。

一旦你让它工作,记得manage.py makemigrations APP_NAME,因为我发现它似乎已经避免了注释掉步骤。

【讨论】:

【参考方案8】:

我通过INSTALLED_APPS 中的以下顺序克服了这个问题:

INSTALLED_APPS = (
    'django.contrib.sites',
    'allauth',                                                                 
    'allauth.account',                                                         
    # my other apps,
)

【讨论】:

【参考方案9】:

我的“注释掉”模式与接受的答案略有不同(如下所示)。也就是说,它可能是唯一的,具体取决于分散在您的应用程序中的各种依赖项的值。如果注释掉上面的值会引发错误消息,我建议注释掉引发错误消息的应用程序并相应地取消注释,直到它适合您。这可能有点“蛮力”,但应该可以完成工作。

INSTALLED_APPS = [
    # django native apps
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    "django.forms",
    'django.contrib.gis',
    # 'django.contrib.flatpages',
    #third party apps
    #django-allauth apps
    'allauth',
    # 'allauth.account',
    # 'allauth.socialaccount',
    # 'allauth.socialaccount.providers.facebook',
    # 'allauth.socialaccount.providers.google',
    # 'allauth.socialaccount.providers.twitter',
    # 'allauth.socialaccount.providers.github',
    # my apps
    'app0',
    'app1',]

#MIGRATION_MODULES = "sites": "mysite.contrib.sites.migrations"

【讨论】:

【参考方案10】:

还要确保 SITE_ID = 1 位于 settings.py 中的 DATABASE 定义之前

【讨论】:

我看不出这会如何影响任何事情。 DATABASES 和 SITE_ID 都是分配给字符串的变量,这些设置由 Django 加载,无论顺序如何,它都不会产生任何影响(与列表中应用程序的顺序完全不同)。

以上是关于Django DatabaseError:关系“django_site”的主要内容,如果未能解决你的问题,请参考以下文章

Django:DatabaseError 列不存在

Django如何在DatabaseError后重新连接:查询超时

(DatabaseError: no such table: django_session) Django 1.3 selenium 测试期间的错误

Django DatabaseError timedelta的无效连接器

Django DatabaseError - 没有这样的保存点

尝试重置密码时出现 Djongo + Django + MongoDB Atlas DatabaseError