[FeatureServer] Vectorformats Django foreign key fields

Vincent Hussey vincent.hussey at opw.ie
Wed Jun 25 08:45:50 PDT 2014


Hi,
Vectorformats Django Format does not currently support foreign key 
fields in models:

 >>> from vectorformats.Formats import Django, GeoJSON
 >>> from realtime.models import *
 >>> qs = 
CurrentReading.objects.exclude(station__geometry__isnull=True).select_related()
 >>> fields=['value','err_code', 'station.ref', 'sensor.ref']
 >>> djf = Django.Django(geodjango="station.geometry", properties=fields)
 >>> geoj = GeoJSON.GeoJSON(crs=4326)
 >>> geojson = geoj.encode(djf.decode(qs))
Traceback (most recent call last):
   File "<console>", line 1, in <module>
   File 
"/opt/realtime/env/lib/python2.6/site-packages/vectorformats/Formats/Django.py", 
line 55, in decode
     geom = getattr(res, self.geodjango)
AttributeError: 'CurrentReading' object has no attribute 'station.geometry'
 >>>

The following patch  addresses this issue:

--- Django.py    2014-06-25 16:41:41.878772339 +0100
+++ Django_revised.py    2014-06-25 16:41:55.262771936 +0100
@@ -20,7 +20,10 @@
      geodjango = False
      """
  If you have GeoDjango geometry columns, set this to the name of the
-geometry column.
+geometry column e.g.
+    geodjango = 'the_geom'
+This can be in a model linked with a foreign key, e.g.
+    geodjango = 'other_model.the_geom'
  """

      pickled_geometry = False
@@ -51,7 +54,10 @@

              elif self.geodjango:
                  geometry = None
-                geom = getattr(res, self.geodjango)
+                gd = self.geodjango.split('.')
+                geom = res
+                for g in gd:
+                    geom = getattr(geom, g)
                  if geom:
                      geometry = {}
                      geometry['type'] = geom.geom_type
@@ -64,6 +70,10 @@

              if self.properties:
                  for p in self.properties:
-                    feature.properties[p] = getattr(res, p)
+                    pp = p.split('.')
+                    prop = res
+                    for q in pp:
+                        prop = getattr(prop, q)
+                    feature.properties[p] = prop
              results.append(feature)
          return results

Vincent


**********************************************************************
Email Disclaimer: http://www.opw.ie/en/disclaimer/ 
**********************************************************************



More information about the FeatureServer mailing list