【问题标题】:GeoDjango & MySQL: points can't be NULL, what other "empty" value should I use?GeoDjango 和 MySQL:点数不能为 NULL,我应该使用什么其他“空”值?
【发布时间】:2010-11-03 09:49:24
【问题描述】:

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

还有哪些可能?

【问题讨论】:

    标签: mysql django geodjango


    【解决方案1】:

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

        【解决方案3】:

        一个快速的想法是有另一个布尔字段,当你有一个实际点时,你将其标记为真/假。这将使查询变得容易,因为您可以将布尔字段添加到 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-28
          • 2023-02-17
          • 2012-12-16
          • 2021-09-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-13
          相关资源
          最近更新 更多