change default of geometryfield / support for null values

This commit is contained in:
Laura Klünder 2017-06-26 23:23:39 +02:00
parent 769b643374
commit 0ef51ac147

View file

@ -26,13 +26,13 @@ def validate_geometry(geometry: BaseGeometry):
class GeometryField(models.TextField): class GeometryField(models.TextField):
default_validators = [validate_geometry] default_validators = [validate_geometry]
def __init__(self, geomtype=None, *args, **kwargs): def __init__(self, geomtype=None, default=None):
if geomtype == 'polyline': if geomtype == 'polyline':
geomtype = 'linestring' geomtype = 'linestring'
if geomtype not in (None, 'polygon', 'linestring', 'point'): if geomtype not in (None, 'polygon', 'linestring', 'point'):
raise ValueError(_('GeometryField.geomtype has to be None, "polygon", "linestring", "point"')) raise ValueError(_('GeometryField.geomtype has to be None, "polygon", "linestring", "point"'))
self.geomtype = geomtype self.geomtype = geomtype
super().__init__(*args, **kwargs) super().__init__(default=default)
def deconstruct(self): def deconstruct(self):
name, path, args, kwargs = super().deconstruct() name, path, args, kwargs = super().deconstruct()
@ -46,10 +46,12 @@ class GeometryField(models.TextField):
return shape(json.loads(value)) return shape(json.loads(value))
def to_python(self, value): def to_python(self, value):
if value is None:
return None
return clean_geometry(shape(json.loads(value))) return clean_geometry(shape(json.loads(value)))
def get_prep_value(self, value): def get_prep_value(self, value):
if value == '': if value is None:
return None return None
elif self.geomtype == 'polygon' and not isinstance(value, Polygon): elif self.geomtype == 'polygon' and not isinstance(value, Polygon):
raise TypeError(_('Expected Polygon instance, got %s instead.') % repr(value)) raise TypeError(_('Expected Polygon instance, got %s instead.') % repr(value))