2017-02-10 24 views
0

В Django Просмотров:Присоединиться к связанным данным, когда Serialize Json and geojson

Я хочу объединить данные из двух таблиц. lease_geom.query дает правильный запрос, но когда я сериализую lease_geom, данных из связанной таблицы нет.

def mapdata_leases_geom(request, lic): 

    # only one table data 
    lease_geom = Ssm_El_Ml_Pl_Blocks.objects.filter(license=lic).select_related() 
    q = lease_geom.query 
    lease_geom = serialize('geojson', lease_geom, 
      geometry_field='geom') 

Функция просто возвращает в формате GeoJSON 1-й таблицы.

ответ

0

После работы так много дней я нашел решение здесь вы можете создать свой собственный Serializer с помощью сериализаторы классов в Джанго. Я отправляю решение, которое работает для меня.

CUSTOMIZED GeoJSON Serializer

from django.utils.encoding import force_text 
from django.contrib.gis.serializers.geojson import Serializer as geoSerializer 

class geoJsonSerialiser(geoSerializer): 

    # ADDING FIELDS TO GEOJSON 
    def add_field(self, current, obj): 
     current['grant date'] = force_text(obj.lease.grant_date) 
     current['expiry date'] = force_text(obj.lease.expiry_date) 
     return current 

    # OVERRIDING GET_DUMP_OBJECT METHOD IN GEOJSON SERIALIZER 

    def get_dump_object(self, obj): 
     current = self.add_field(self._current, obj) 
     data = { 
      "type": "Feature", 
      "properties": current, 
     } 
     if ((self.selected_fields is None or 'pk' in self.selected_fields) and 
        'pk' not in data["properties"]): 
      data["properties"]["pk"] = obj._meta.pk.value_to_string(obj) 
     if self._geometry: 
      if self._geometry.srid != self.srid: 
       # If needed, transform the geometry in the srid of the global geojson srid 
       if not HAS_GDAL: 
        raise SerializationError(
         'Unable to convert geometry to SRID %s when GDAL is not installed.' % self.srid 
        ) 
       if self._geometry.srid not in self._cts: 
        srs = SpatialReference(self.srid) 
        self._cts[self._geometry.srid] = CoordTransform(self._geometry.srs, srs) 
       self._geometry.transform(self._cts[self._geometry.srid]) 
      data["geometry"] = eval(self._geometry.geojson) 
     else: 
      data["geometry"] = None 
     return data 

Может быть полезно для других