geometry列包含空值

时间:2015-06-24 18:08:34

标签: python django geodjango

所以我试图在django中为模型添加一个点字段,如下所示:

class Location(models.Model):
    lat = models.FloatField(blank=True, null=True)
    lng = models.FloatField(blank=True,null=True)
    geometry = models.PointField(srid=4326,default='POINT(0.0,0.0)')
    objects = models.GeoManager()

我已经有了许多具有lat lng坐标的位置的数据库,但他们不需要点域。我收到此错误django.db.utils.IntegrityError: column "geometry" contains null values

我设置了默认设置,但是当我运行&py; manage.py migrate'时,它仍然会给我错误。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

default不会更改数据库中的旧行(迁移前存在的旧行)。您应该将geometry字段设置为可为空,然后进行迁移。迁移后,您可以使用默认值填写空值并删除null=True或保持原样

<强>更新

基于此postPointField似乎不可能是null(即使它被指定为真正研磨我的齿轮......)。 GIVEN你的模型不需要改变,但它看起来不像django可以为你处理这个超级好。

我看到两个选项(可能存在更好的选项)

  1. 自己在实际表上进行数据迁移(我在添加新列时认为大多数数据库都可以在那里设置默认值,它会为你填充)
  2. 创建一个与新列基本相同的新模型,复制数据,删除旧模型和列。
  3. 这些似乎都不理想,但谷歌还没有向我展示更好的方式