我有这个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)定义为“空”,但是我必须记住我计划使用数据的所有惯例,否则很多事件将发生在非洲大西洋西部的某个地方......
还有哪些其他可能性?
答案 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)