7

我有这个 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) 定义为“空”,但是我必须记住我计划使用数据的所有地方的约定,否则很多事件将发生在非洲西部的大西洋某处......

还有哪些其他可能性?

4

3 回答 3

2

我不认为你在这里有很多选择。要么使用 (0, 0) 之类的占位符,要么将点封装在对象中并在需要该点的任何地方引用该对象。这样可以使对对象的引用可以为空,但是额外的连接会损害性能并使事情复杂化。

于 2010-11-03T10:36:55.390 回答
2

我只是有同样的问题。对我来说,我需要指定不创建空间索引。因此,您的模型将更改为:

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)
于 2014-03-05T09:45:05.507 回答
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
于 2013-10-23T16:31:42.217 回答