2016-09-20 15:57:37 +02:00
|
|
|
import json
|
|
|
|
|
|
|
|
from django.db import models
|
|
|
|
from shapely.geometry import mapping, shape
|
|
|
|
|
2016-09-27 16:18:18 +02:00
|
|
|
from c3nav.mapdata.utils import sort_geojson
|
2016-09-20 16:13:47 +02:00
|
|
|
|
2016-09-20 15:57:37 +02:00
|
|
|
|
|
|
|
class GeometryField(models.TextField):
|
|
|
|
def from_db_value(self, value, expression, connection, context):
|
|
|
|
if value is None:
|
|
|
|
return value
|
|
|
|
return shape(json.loads(value))
|
|
|
|
|
|
|
|
def to_python(self, value):
|
|
|
|
return shape(json.loads(value))
|
|
|
|
|
|
|
|
def get_prep_value(self, value):
|
2016-09-20 16:13:47 +02:00
|
|
|
return json.dumps(sort_geojson(mapping(value)))
|
2016-09-26 11:18:56 +02:00
|
|
|
|
|
|
|
|
|
|
|
class JSONField(models.TextField):
|
|
|
|
def from_db_value(self, value, expression, connection, context):
|
|
|
|
if value is None:
|
|
|
|
return value
|
|
|
|
return json.loads(value)
|
|
|
|
|
|
|
|
def to_python(self, value):
|
|
|
|
return json.loads(value)
|
|
|
|
|
|
|
|
def get_prep_value(self, value):
|
|
|
|
return json.dumps(value)
|