Wie greife ich von Django aus auf ein Geometrie- (Punkt-) Feld in der PostGIS-Datenbank zu?

n meinem Projekt verwende ich PostgreSQL / PostGIS als Datenbank und Django mitdjango.contrib.gis konfiguriert. Dasexisting table pois enthält geospatialPunk Daten. Hier ist ein Auszug aus der SQL-Anweisung create:

CREATE TABLE pois
(
  ogc_fid serial NOT NULL,
  the_geom geometry(Point,900914),
  name character varying(254),
  -- ...

Ich habe das Django-Modell mit dem folgenden Befehl generiert:

$ python manage.py inspectdb

Das generierte Modell sieht folgendermaßen aus:

from django.contrib.gis.db import models

class POIs(models.Model):
    ogc_fid = models.AutoField(primary_key=True)
    the_geom = models.TextField(blank=True, null=True) # This field type is a guess.
    name = models.CharField(max_length=254, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'pois'

Ich füge das folgende Feld hinzu, um die Standardverwaltung mit einer GeoDjango-spezifischen Instanz zu überschreiben:

objects = models.GeoManager()

Nun, ich möchte @ ersetzthe_geom = models.TextField() mit demkorrekter Datentyp das sollte entweder @ semodels.PointField() odermodels.GeometryField(). Ich habe beides versucht. Dann teste ich das Modell in der Python-Shell:

$ python manage.py shell
Python 3.4.3 (default, Jul 28 2015, 18:20:59) 
In [1]: from berlin import models
In [2]: models.POIs.objects.first()

Dies schlägt fehl und die folgenden stacktrace wird ausgegeben:

/home/user/.virtualenvs/myproject/lib/python3.4/site-packages/django/contrib/ \
    gis/db/models/fields.py in select_format(self, compiler, sql, params)
     57         else:
     58             sel_fmt = '%s'
---> 5,9         if connection.ops.select:
     60             # This allows operations to be done on fields in the SELECT,
     61             # overriding their values -- used by the Oracle and MySQL

AttributeError: 'DatabaseOperations' object has no attribute 'select'

Es gibtkein Fehle wenn ich das Modell mit @ verlasmodels.TextField. Dann wird der String-Wert ausgegeben.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage