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后重新连接:查询超时
(DatabaseError: no such table: django_session) Django 1.3 selenium 测试期间的错误
Django DatabaseError timedelta的无效连接器