GeoDjango& MySQL:点数不能为NULL,我应该使用其他什么“空”值?

时间:2010-11-03 09:49:25

标签: mysql django geodjango

我有这个Django模型:

from django.contrib.gis.db import models

class Event(models.Model):
    address = models.TextField()
    point = models.PointField('coordinates', null=True, blank=True)

当我使用MySQL同步此模型时,会在创建索引时打印此错误消息:

Failed to install index for events.Event model: (1252, 'All parts of a SPATIAL index must be NOT NULL')

所以,不能使用null=True(假设我想拥有该索引),我还有其他可能性吗?我可以将点(0,0)定义为“空”,但是我必须记住我计划使用数据的所有惯例,否则很多事件将发生在非洲大西洋西部的某个地方......

还有哪些其他可能性?

3 个答案:

答案 0 :(得分:2)

我认为你在这里没有太多选择。您可以使用占位符(例如(0,0)),也可以将点封装在对象中,并在需要该点的任何位置引用该对象。这样,对象的引用可以被置为可空,但额外的连接会损害性能并使事情复杂化。

答案 1 :(得分:0)

一个快速的想法是,当你有一个实际的点时,你有另一个布尔字段,你标记为真/假。它会使查询变得容易,因为您可以将布尔字段添加到where子句中。

class Event(models.Model):
    ...
    has_point = models.BooleanField(default=False)
    point = models.PointField('coordinates', ...)

Event.objects.filter(has_point=True)...#whatever else you need when handling location

答案 2 :(得分:0)

我遇到了同样的问题。对我来说,我需要指定不要制作spatial_index。所以你的模型会改为:

from django.contrib.gis.db import models

class Event(models.Model):
    address = models.TextField()
    point = models.PointField('coordinates', null=True, blank=True, spatial_index=False)