[GeoDjango] Modelo que devuelve un QuerySet cuando yo espero un GeoQuerySet

78 views
Skip to first unread message

Alex D.

unread,
Feb 20, 2012, 8:58:54 AM2/20/12
to Django-es
Hola,

Tengo un modelo con un campo definido como PointField. Este modelo
hereda directamente de django.contrib.gis.db.models por lo que segun
tengo entendido hace uso de la extensión GeoDjango.

El problema viene a que cuando quiero crear un objeto queryset tal
como: qs = Location.objects.all() Resulta que lo anterior me crea un
objeto QuerySet en lugar de GeoQuerySet, y claro los métodos que a mi
me interesan como extent() por ejemplo no están disponibles.

La pregunta: No sé qué estoy haciendo mal. ¿Alguien sabe de qué me
estoy dejando?


Un saludo!

Alex D.

unread,
Feb 21, 2012, 11:09:08 AM2/21/12
to Django-es
Claro,

from django.contrib.gis.db import models

class Location(models.Model):
name = models.CharField(max_length=30, null=True)
location = models.PointField(srid=4326)
datestamp = models.DateTimeField(auto_now=False,
auto_now_add=True)
kat = models.ForeignKey(Kat)

def __unicode__(self): return self.name

Ramiro Morales

unread,
Feb 21, 2012, 12:34:21 PM2/21/12
to djan...@googlegroups.com
2012/2/21 Alex D. <alejand...@starlab.es>:

Sospecho que se debe a que no has leído la documentación.

Entre los [1]primeros pasos del [2]tutorial de GeoDjango, mas
específicamente en la sección que trata cómo definir modelos
"geográficos" se lee:

"...
Two important things to note:

1. The models module is imported from django.contrib.gis.db.
2. The model overrides its default manager with GeoManager; this is
required to perform spatial queries.
..."

Estás haciendo bien el item 1 pero no el item 2.

Probando la modificación sugerida con SpatiaLite, Django 1.4beta1 y
poniendo tu modelo Location::

from django.contrib.gis.db import models

class Location(models.Model):
name = models.CharField(max_length=30, null=True)
location = models.PointField(srid=4326)
datestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

objects = models.GeoManager()

def __unicode__(self):
return self.name

...en una app llamada geomodel, obtengo::

$ PYTHONPATH=~/django/upstream/ ./manage.py shell
SpatiaLite version ..: 3.0.0-beta Supported Extensions:
- 'VirtualShape' [direct Shapefile access]
- 'VirtualDbf' [direct Dbf access]
- 'VirtualText' [direct CSV/TXT access]
- 'VirtualXL' [direct XLS access]
- 'VirtualText' [direct CSV/TXT access]
- 'VirtualNetwork' [Dijkstra shortest path]
- 'RTree' [Spatial Index - R*Tree]
- 'MbrCache' [Spatial Index - MBR cache]
- 'VirtualSpatialIndex' [R*Tree metahandler]
- 'VirtualFDO' [FDO-OGR interoperability]
- 'SpatiaLite' [Spatial SQL - OGC]
PROJ.4 Rel. 4.7.1, 23 September 2009
GEOS version 3.2.2-CAPI-1.6.2
^[[APython 2.7.2+ (default, Jan 20 2012, 23:05:38)
Type "copyright", "credits" or "license" for more information.

IPython 0.12 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

In [1]: from geomodel.models import Location

In [2]: qs = Location.objects.all()

In [3]: type(qs)
Out[3]: django.contrib.gis.db.models.query.GeoQuerySet

In [4]:

Suerte,

--
Ramiro Morales

1. https://docs.djangoproject.com/en/1.3/ref/contrib/gis/tutorial/#defining-a-geographic-model
2. https://docs.djangoproject.com/en/1.3/ref/contrib/gis/tutorial/

Alex D.

unread,
Feb 23, 2012, 8:29:59 AM2/23/12
to Django-es

Ahora lo pruebo pero tiene toda la pinta de ser eso. ¡Mil gracias
Ramiro!



On 21 feb, 18:34, Ramiro Morales <cra...@gmail.com> wrote:
> 2012/2/21 Alex D. <alejandro.d...@starlab.es>:
> 1.https://docs.djangoproject.com/en/1.3/ref/contrib/gis/tutorial/#defin...
> 2.https://docs.djangoproject.com/en/1.3/ref/contrib/gis/tutorial/
Reply all
Reply to author
Forward
0 new messages