几何列包含空值

geometry column contains null values

所以我正在尝试向 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()

我的数据库中已经有很多带有经纬度坐标的位置,但它们不需要点字段。我收到此错误 django.db.utils.IntegrityError: column "geometry" contains null values

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

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

更新

基于此 post 似乎很可能 PointField 不可能是 null(即使它被指定为真正磨我的齿轮......)。鉴于您的模型不需要更改,但看起来 django 不能为您很好地处理这个问题。

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

  1. 自己对实际 table 进行数据迁移(我认为对于大多数数据库,当您添加新列时,您可以在那里设置默认值,它会为您填充)
  2. 创建一个与新列基本相同的新模型,将数据复制过来,删除旧模型和列。

这些看起来都不理想,但谷歌尚未向我展示更好的方法