mirror of
https://github.com/django/django.git
synced 2025-07-04 17:59:13 +00:00
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
This commit is contained in:
parent
3dd6b422ca
commit
8da13e60c2
@ -1,14 +1,29 @@
|
|||||||
|
from django.core.validators import ValidationError
|
||||||
from django.oldforms import LargeTextField
|
from django.oldforms import LargeTextField
|
||||||
|
from django.contrib.gis.geos import GEOSException, GEOSGeometry
|
||||||
|
|
||||||
class WKTField(LargeTextField):
|
class WKTField(LargeTextField):
|
||||||
"An oldforms LargeTextField for editing WKT text in the admin."
|
"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):
|
def render(self, data):
|
||||||
# Returns the WKT value for the geometry field. When no such data
|
# Returns the WKT value for the geometry field. When no such data
|
||||||
# is present, return None to LargeTextField's render.
|
# is present, return None to LargeTextField's render.
|
||||||
if not data:
|
if isinstance(data, GEOSGeometry):
|
||||||
return super(WKTField, self).render(None)
|
|
||||||
else:
|
|
||||||
return super(WKTField, self).render(data.wkt)
|
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.')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user