为什么我不能将Django设置数据库引擎设置为Postgis?

为什么我不能将Django设置数据库引擎设置为Postgis?,django,heroku,postgis,heroku-postgres,Django,Heroku,Postgis,Heroku Postgres,我已经将Django应用程序部署到Heroku,这涉及使用GeoDjango功能和PostGis数据库。我的设置是这样的 导入操作系统 进口django_heroku 导入dj_数据库_url #在项目内部构建如下路径:os.path.join(BASE_DIR,…) BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(u文件_u))) #快速启动开发设置-不适合生产 #看https://docs.djangoproject.com/

我已经将Django应用程序部署到Heroku,这涉及使用GeoDjango功能和PostGis数据库。我的设置是这样的

导入操作系统
进口django_heroku
导入dj_数据库_url
#在项目内部构建如下路径:os.path.join(BASE_DIR,…)
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(u文件_u)))
#快速启动开发设置-不适合生产
#看https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
#安全警告:请对生产中使用的密钥保密!
密钥=“”
#安全警告:不要在生产环境中打开调试的情况下运行!
调试=真
允许的_主机=[]
#应用程序定义
已安装的应用程序=[
“rest_框架”,
“rest\u框架\u gis”,
“django.contrib.gis”,
“django.contrib.admin”,
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
'service.apps.ServiceConfig'
]
中间件=[
'django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xFrameOptions中间件',
]
ROOT_URLCONF='ARProject.url'
模板=[
{
'BACKEND':'django.template.backends.django.DjangoTemplates',
“DIRS”:[],
“应用程序目录”:正确,
“选项”:{
“上下文处理器”:[
“django.template.context_processors.debug”,
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_应用程序='ARProject.WSGI.APPLICATION'
#数据库
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
数据库={}
DATABASES['default']=dj_database_url.config(default='1〕postgis://...')
#密码验证
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-密码验证器
验证密码验证程序=[
{
'NAME':'django.contrib.auth.password\u validation.UserAttributesMilarityValidator',
},
{
'NAME':'django.contrib.auth.password\u validation.MinimumLengthValidator',
},
{
'NAME':'django.contrib.auth.password\u validation.CommonPasswordValidator',
},
{
'NAME':'django.contrib.auth.password\u validation.NumericPasswordValidator',
},
]
#国际化
# https://docs.djangoproject.com/en/2.2/topics/i18n/
语言代码='en us'
时区='UTC'
使用_I18N=True
使用\u L10N=True
使用_TZ=True
#静态文件(CSS、JavaScript、图像)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
静态URL='/STATIC/'
#图像上载文件夹位置
上传目录='/tmp/'
MODELS\u DIR=os.path.join('服务','模型')
JSON\u PATH=os.PATH.join(MODELS\u DIR,'model.JSON')
MODELS\u PATH=os.PATH.join(MODELS\u DIR,‘model.h5’)
GDAL\u LIBRARY\u PATH=os.environ.get('GDAL\u LIBRARY\u PATH'))
GEOS\u LIBRARY\u PATH=os.environ.get('GEOS\u LIBRARY\u PATH'))
django_heroku.settings(locals())
当我运行Django shell时

>>from django.conf import settings
>>settings.DATABASES['default']['ENGINE']
>>'django.db.backends.postgresql_psycopg2' instead of 'django.contrib.gis.db.backends.postgis'

即使在settings.py中手动设置数据库['default']['ENGINE'],也会得到相同的结果。我发现一些讨论涉及到与我相同的问题,但他们的解决方案在我的案例中不起作用。

Django设置在启动时加载,在运行时不应更改

这不起作用的原因可能是Django已经加载了DB连接,因此更改设置不会产生任何效果

如果要使用多个数据库,请查看此处

更新:

看起来像是
django\u heroku.settings(locals())
设置数据库()


如果您将其更改为
django\u heroku.settings(locals(),database=False)
则不应更改它。

噢,很抱歉让您不清楚这一点。我不是说我想在运行时改变。我刚刚编辑了我的帖子,让我们来看看。我不知道是什么随机的绝望的谷歌搜索最终把我带到了这篇备受关注的帖子上,但它解决了我的问题,因为在Heroku上部署GeoDjango应用程序失败了好几天。你刚刚让我开心了@Krukas。只有一个提示:正确的参数是
databases
,结尾是s。无法建议编辑,因为编辑太少。如果可以的话,也许可以更新一下。