1

好吧,为什么我不能将空值保存到 Point-、MultiPoint- 或 PolygonField?

我创建了一个表单,用户可以在其中选择他们发现特定鸟类的区域或位置。为了存储我使用 GeoDjango 的数据,数据可以存储在 PointField 或 PolygonField 中。

然而 PointField 不是必需的,所以在我设置为 False 的表单中,这给了我以下错误;

作为记录,我使用 MySQL 作为数据库。我目前不需要 PostgreSQL 附带的所有额外功能。

IntegrityError at /sighting/where-did-you-spot-the-bird/

(1048, "Column 'sighting' cannot be null")

#models.py

from django.contrib.gis.db import models

class Sighting(models.Model)
    name = models.CharField(max_length=140)
    description = models.TextField()
    sighting = models.PointField(
        blank=True,
        null=True,
        spatial_index=False
    )

所以列瞄准不能为空,这是为什么呢?我错过了什么还是总是需要一个值?

一种解决方案是保存默认值,比如说 Point(0,0) 但它们应该是另一种解决方案。

任何想法将不胜感激!

4

1 回答 1

1

MySQL 不允许空空间字段(已知陷阱:https ://www.buzzphp.com/posts/geodjango-mysql-points-cant-be-null-what-other-empty-value-should-i-use )

添加一个default空的Point()或一个带有 lat/long 的点0,0

class Sighting(models.Model)
    sighting = models.PointField(
        blank=True,
        spatial_index=False,
        default=Point(0, 0)  # or Point([]) if allowed
)

或者考虑使用 PostGIS 更改为 PostgresSQL:当我们使用 GIS 时,几乎按照定义,我们将使用大数据,而 PostgreSQL 更适合该角色。(示例文章:https ://www.enterprisedb.com/blog/postgresql-vs-mysql-360-degree-comparison-syntax-performance-scalability-and-features )

于 2021-09-14T15:00:03.870 回答