diff --git a/django/contrib/gis/oldforms/__init__.py b/django/contrib/gis/oldforms/__init__.py index 0f3f33c78e..94ef9acc1f 100644 --- a/django/contrib/gis/oldforms/__init__.py +++ b/django/contrib/gis/oldforms/__init__.py @@ -1,14 +1,29 @@ +from django.core.validators import ValidationError from django.oldforms import LargeTextField +from django.contrib.gis.geos import GEOSException, GEOSGeometry class WKTField(LargeTextField): "An oldforms LargeTextField for editing WKT text in the admin." - + def __init__(self, *args, **kwargs): + super(WKTField, self).__init__(*args, **kwargs) + # Overridding the validator list. + self.validator_list = [self.isValidGeom] + def render(self, data): # Returns the WKT value for the geometry field. When no such data # is present, return None to LargeTextField's render. - if not data: - return super(WKTField, self).render(None) - else: + if isinstance(data, GEOSGeometry): return super(WKTField, self).render(data.wkt) + elif isinstance(data, basestring): + return super(WKTField, self).render(data) + else: + return super(WKTField, self).render(None) + + def isValidGeom(self, field_data, all_data): + try: + g = GEOSGeometry(field_data) + except GEOSException: + raise ValidationError('Valid WKT or HEXEWKB is required for Geometry Fields.') +