python - geodjango 与南导致 "duplicate column name error"与 Spatialight 数据库

标签 python django django-south geodjango

我有 geodjango 的自定义字段:

from django.contrib.gis.db import models as geomodels

class PointField(geomodels.PointField):
    def formfield(self, **kwargs):
        defaults = {
            'form_class': CustomFormField
        }
        defaults.update(kwargs)
        return super(PointField, self).formfield(**defaults)


try:
    from south.modelsinspector import add_introspection_rules
    from south.introspection_plugins.geodjango import rules

    add_introspection_rules(rules, ["^project\.apps\.appname\.fields\.PointField"])
except ImportError:
    pass

和 Django 南迁移:

class Migration(SchemaMigration):

    def forwards(self, orm):
        # Adding field 'Address.geoposition'
        db.add_column('company_address', 'geoposition',
                      self.gf('project.apps.appname.fields.PointField')(srid=900913, geography=True),
                      keep_default=False)


    def backwards(self, orm):
        # Deleting field 'Address.geoposition'
        db.delete_column('company_address', 'geoposition')

当执行此迁移时,我收到错误:

AddGeometryColumn() error: "duplicate column name: geoposition"
CreateSpatialIndex() error: either "company_address"."geoposition" isn't a Geometry column or a SpatialIndex is already defined

我已经没有想法了,不知道如何解决这个问题。

软件:

  • Django 1.4
  • 空间光3.0.1
  • gdal 1.9.2
  • 南0.7.6

数据库的地理元数据已初始化:

subprocess.call(["spatialite", settings.DATABASES['default']['NAME'], "SELECT InitSpatialMetaData();"])

并且添加了 srs 条目:

from django.contrib.gis.utils import add_srs_entry
add_srs_entry(900913)

当我禁用迁移时,我没有收到错误。禁用迁移的代码:

SOUTH_MIGRATION_MODULES = {
    'appname': 'ignore',
}

但我需要一切才能顺利进行迁移。有什么想法导致问题吗?

最佳答案

深入研究代码,传统的 alter table 语句不适用于空间字段,它会尝试创建一个“None”列,然后使用 AddGeometryColumn 命令实际正确创建它。但是,South 似乎没有得到提示,因此 AddGeometryColumn 失败,因为该列已经存在。

仍在尝试寻找答案,但我希望它只是升级到新版本。我会随时通知您!

Django source

关于python - geodjango 与南导致 "duplicate column name error"与 Spatialight 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14911503/

相关文章:

python - django-租户模式 : Migrate data from shared schema to multi tenant schema

Django South Postgres 数据迁移问题

python字符串拆分切片并放入列表中

python - 如何使用 f2py 分配输入数组?

python - save_model 方法,但数据库需要不同的关系?

python - 带有 PK 的 Django REST POST 到 HyperlinkedModelSerializer,如何将 PK 转换为 URL?

python - 当我使用 Mime 从 Python 发送时,Outlook 和 Thunderbird 收不到附件

python - 如何使 x 和 y 轴标签的文本大小以及 matplotlib 和 prettyplotlib 图形上的标题更大

python - django:禁用某一特定字段的tinymce

Django 南 : How to create rules for a Custom Field?