Ray*_*Ray 6 django postgresql postgis django-migrations
我正在尝试将Django 1.6.2应用程序升级到1.7.10.我使用运行PostgreSQL 9.3.4和PostGIS 2.1.1 的Postgres.app版本9.3.4 在我的Mac 上运行PostgreSQL.我遇到的问题是,当我运行新的"makemigrations"命令时,我收到以下错误(整个堆栈跟踪位于底部):
django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.postgis' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
u'base', u'mysql', u'oracle', u'postgresql_psycopg2', u'sqlite3'
Error was: cannot import name BaseSpatialOperations
Run Code Online (Sandbox Code Playgroud)
以下是相关设置:
# conf/settings/base.py
DATABASES = {
'default': {
'ENGINE' : 'django.contrib.gis.db.backends.postgis',
'NAME' : 'geodb',
'USER' : 'geo',
'PASSWORD': 'geopassword', # not really
'HOST' : 'localhost',
'PORT' : '',
}
}
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.gis',
'apps.admin', # my apps live in an apps subdir.
'apps.home',
)
POSTGIS_VERSION = (2,1,1)
Run Code Online (Sandbox Code Playgroud)
我在Django 1.6.2应用程序中使用了相同的DATABASE ENGINE设置,没有任何问题.在研究这个问题时,其他一些开发人员忘记在他们的虚拟环境中安装psycopg2,但我的安装版本是2.6.1.我使用2.5.2版与Django 1.6.2,但如果我将psycopg2回滚到该版本,我仍然会收到此错误.我已经阅读了这两个版本之间的所有psycopg2发行说明,并没有看到任何可能导致此问题的内容.
Django 1.7 GeoDjango教程也使用了这个postgis引擎设置,因此它似乎没有被弃用,并且Django 1.7发行说明中没有任何相关内容表明这可能是一个问题.
我还构建了上面提到的GeoDjango教程的测试版本,如果我在其上运行makemigrations命令,我会得到同样的错误.
最后,我做了网络搜索,没有看到任何讨论此迁移/数据库引擎问题的文章.有谁看到什么是错的?
谢谢!
# Full stacktrace
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
django.setup()
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/contrib/auth/models.py", line 40, in <module>
class Permission(models.Model):
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/models/base.py", line 122, in __new__
new_class.add_to_class('_meta', Options(meta, **kwargs))
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/models/base.py", line 297, in add_to_class
value.contribute_to_class(cls, name)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/models/options.py", line 166, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/__init__.py", line 40, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/utils.py", line 242, in __getitem__
backend = load_backend(db['ENGINE'])
File "/Users/me/venv/dj_17/lib/python2.7/site-packages/django/db/utils.py", line 126, in load_backend
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.postgis' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
u'base', u'mysql', u'oracle', u'postgresql_psycopg2', u'sqlite3'
Error was: cannot import name BaseSpatialOperations
Run Code Online (Sandbox Code Playgroud)
出于想法,我将 Django 从 1.7.10 升级到 1.8.4,问题就消失了。我不知道为什么这解决了它,但它确实解决了。
| 归档时间: |
|
| 查看次数: |
6905 次 |
| 最近记录: |