2010-11-03 9 views
5

tengo este modelo Django:GeoDjango y MySQL: los puntos no pueden ser NULL, ¿qué otro valor "vacío" debería usar?

from django.contrib.gis.db import models 

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

al sincronizar este modelo usando MySQL, este mensaje de error se imprime mientras que la creación de índices:

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

así, no ser capaz de utilizar null=True (dado que Quiero tener ese índice), ¿qué otras posibilidades tengo? Podría definir el punto (0,0) como "vacío", pero luego tengo que recordar esa convención en todos los lugares donde planeo usar los datos, de lo contrario, muchos eventos tendrán lugar en algún lugar del Atlántico al oeste de África ...

¿Qué otras posibilidades hay?

Respuesta

1

No creo que tengas muchas opciones aquí. O bien usa un marcador de posición como (0, 0), o encapsula el punto en un objeto y hace referencia al objeto donde sea que necesite el punto. De esta forma, la referencia al objeto podría ser anulable, pero la unión extra dañaría el rendimiento y complicaría las cosas.

0

Una idea rápida sería tener otro campo booleano que marque como verdadero/falso cuando tenga un punto real. Haría las consultas fáciles porque podría agregar el campo booleano a la cláusula 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 
0

Acabo de tener el mismo problema. Para mí, necesitaba especificar no hacer un spatial_index. Entonces su modelo cambiaría a:

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) 
Cuestiones relacionadas