我目前有一个 django 应用程序正在我的 PC 上使用我的数据库中的数据开发,但是当我尝试在测试服务器上运行这个应用程序时,我收到以下错误
DatabaseError: relation "django_site" does not exist
LINE 1: ..."django_site"."domain", "django_site"."name" FROM "django_si...
谁能告诉我为什么会出现这个错误。谢谢
我目前有一个 django 应用程序正在我的 PC 上使用我的数据库中的数据开发,但是当我尝试在测试服务器上运行这个应用程序时,我收到以下错误
DatabaseError: relation "django_site" does not exist
LINE 1: ..."django_site"."domain", "django_site"."name" FROM "django_si...
谁能告诉我为什么会出现这个错误。谢谢
您可能会在创建站点模型之前调用站点对象(在 syncdb 之前)
例如:站点 = Site.objects.get(id=settings.SITE_ID)
这个问题一直困扰着很多人,包括我自己。虽然是一个乏味的过程,但这种方法为我节省了脑力:
禁用 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 并在上面迁移。
这对我来说一直有效
在启动新数据库和使用 django-debug-toolbar 时遇到了这个奇怪的问题。将其从 中删除INSTALLED_APPS
并能够运行syncdb
。然后重新添加了 debug_toolbar ,它仍然可以正常工作。
debug_toolbar
如果您使用的是 django-debug-toolbar,请尝试在已安装的应用程序中注释掉并重试。
更新:请按照显式设置的步骤:http: //django-debug-toolbar.readthedocs.org/en/1.2.2/installation.html#explicit-setup
我看不到您的模型或您正在使用什么应用程序,但我猜您正在使用 django_site(站点模型)并且在 INSTALLED_APPS 中没有“django.contrib.sites”。
如果我是正确的,那么只需添加'django.contrib.sites',
到您的INSTALLED_APPS
.
我有同样的问题并像这样修复它:
SITE_ID=1
到settings.py
运行这个命令:
python manage.py 迁移
无法用 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
一切顺利。
您可以尝试检查几件事:
settings.py
应该有一个SITE_ID
通常= 1
INSTALLED_APPS
的顺序settings.py
并尝试暂时将项目注释掉。site = Site.objects.get(id=settings.SITE_ID)
。一旦你让它工作,记住manage.py makemigrations APP_NAME
我发现它似乎已经避免了注释掉步骤的情况。
我的“注释掉”模式与接受的答案略有不同(如下所示)。也就是说,它可能是唯一的,具体取决于分散在您的应用程序中的各种依赖项的值。如果注释掉上面的值会引发错误消息,我建议注释掉引发错误消息的应用程序并相应地取消注释,直到它适合您。这可能有点“蛮力”,但它应该可以完成工作。
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"}
我用以下顺序克服了这个问题INSTALLED_APPS
:
INSTALLED_APPS = (
'django.contrib.sites',
'allauth',
'allauth.account',
# my other apps,
)
还要确保 SITE_ID = 1 在 settings.py 中的 DATABASE 定义之前