几何列包含空值
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 不能为您很好地处理这个问题。
我看到两个选项(可能存在更好的选项)
- 自己对实际 table 进行数据迁移(我认为对于大多数数据库,当您添加新列时,您可以在那里设置默认值,它会为您填充)
- 创建一个与新列基本相同的新模型,将数据复制过来,删除旧模型和列。
这些看起来都不理想,但谷歌尚未向我展示更好的方法
所以我正在尝试向 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 不能为您很好地处理这个问题。
我看到两个选项(可能存在更好的选项)
- 自己对实际 table 进行数据迁移(我认为对于大多数数据库,当您添加新列时,您可以在那里设置默认值,它会为您填充)
- 创建一个与新列基本相同的新模型,将数据复制过来,删除旧模型和列。
这些看起来都不理想,但谷歌尚未向我展示更好的方法