GeoDjango:PostgreSQL没有运行迁移,对象没有属性'geo_db_type

Posted

技术标签:

【中文标题】GeoDjango:PostgreSQL没有运行迁移,对象没有属性\'geo_db_type【英文标题】:GeoDjango: PostgreSQL not running migrations, object has no attribute 'geo_db_typeGeoDjango:PostgreSQL没有运行迁移,对象没有属性'geo_db_type 【发布时间】:2018-02-14 23:24:37 【问题描述】:

Django v1.11.5

我正在尝试安装 GeoDjango 以使用 GoogleMaps。

我为 MAC 安装了 PostgreSQL 应用程序并安装了pip install psycopg2。我还使用自制软件安装了GDAL。

编辑 settings.py 以添加:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'djangodb',
        'USER': 'admin',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '5432',
    

但是,当我运行 python manage.py migrate 时,我得到:AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'

我使用以下方式创建了用户:CREATE DATABASE djangodb OWNER admin;

完全错误:

运行迁移:应用 users.0011_location...Traceback(大多数 最近通话最后):文件“manage.py”,第 22 行,在 execute_from_command_line(sys.argv) 文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/core/management/init.py”, 第 364 行,在 execute_from_command_line utility.execute() 文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/core/management/init.py”, 第 356 行,执行中 self.fetch_command(subcommand).run_from_argv(self.argv) 文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/core/management/base.py”, 第 283 行,在 run_from_argv self.execute(*args, **cmd_options) 文件 "/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/core/management/base.py", 第 330 行,执行中 输出 = self.handle(*args, **options) 文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/core/management/commands/migrate.py”, 第 204 行,在句柄中 fake_initial=fake_initial,文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/migrations/executor.py”, 第 115 行,在迁移中 state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) 文件 “/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/migrations/executor.py”, 第 145 行,在 _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) 文件 “/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/migrations/executor.py”, 第 244 行,在 apply_migration 中 state = migration.apply(state, schema_editor) 文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/migrations/migration.py”, 第 129 行,申请中 operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 文件 “/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/migrations/operations/models.py”, 第 97 行,在 database_forwards 中 schema_editor.create_model(模型)文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/backends/base/schema.py”, 第 254 行,在 create_model 定义,extra_params = self.column_sql(模型,字段)文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/backends/base/schema.py”, 第 144 行,在 column_sql 中 db_params = field.db_parameters(connection=self.connection) 文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/db/models/fields/init.py", 第 662 行,在 db_parameters 中 type_string = self.db_type(connection) 文件“/Applications/Anaconda/anaconda/envs/DjangoEnv/lib/python3.6/site-packages/django/contrib/gis/db/models/fields.py”, 第 126 行,在 db_type 中 return connection.ops.geo_db_type(self) AttributeError: 'DatabaseOperations' 对象没有属性 'geo_db_type'

我尝试过的类似问题: Getting 'DatabaseOperations' object has no attribute 'geo_db_type' error when doing a syncdb

【问题讨论】:

您链接到this question,但您的DATABASES 设置中有django.db.backends.postgresql 而不是django.contrib.gis.db.backends.postgis 非常感谢。现在似乎正在运行迁移。我已经尝试过 django.db.backends.postgresql_psycopg2 和问题中列出的那个,都出现错误。我什至创建了新的虚拟环境来测试。再次感谢! 【参考方案1】:

您需要更改 DATABASES 设置以使用 postgis 后端,

'ENGINE': 'django.contrib.gis.db.backends.postgis',

并将'django.contrib.gis' 添加到INSTALLED_APPS

【讨论】:

以上是关于GeoDjango:PostgreSQL没有运行迁移,对象没有属性'geo_db_type的主要内容,如果未能解决你的问题,请参考以下文章

带有 Postgis Geodjango 安装的 Postgresql

GeoDjango inspectdb 与多个数据库

GeoDjango 找不到 geos 库

为啥它在运行迁移时抛出`GeoDjango Postgis 要求不满足得到错误?

带有 postgis 的 geodjango 不起作用

自定义地图、GEODJANGO、TILEMILL、OSM、OPENLAYERS、