From 8da13e60c2b0df68f41897e1fca21ae370a49318 Mon Sep 17 00:00:00 2001 From: Justin Bronn Date: Fri, 18 Jan 2008 16:38:51 +0000 Subject: [PATCH] gis: Fixed #6357, and added a validator to `WKTField`. git-svn-id: http://code.djangoproject.com/svn/django/branches/gis@7026 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/gis/oldforms/__init__.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) 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.') +