В настоящее время я использую PointField от GeoDjango в своем проекте и хотел бы создать свою собственную проверку уровня поля для поля, поскольку я хочу, чтобы пользователи могли вводить строку, например «30, 10», изменить эту строку на«Точка (30,10)», необходимая для поля.
Моя текущая модель:
class Location(models.Model):
name = models.CharField(max_length=255)
geopoint = PointField(
null=True,
blank=True,
max_length=255,
default=None,
Мой сериализатор:
class LocationSerializer(serializers.ModelSerializer):
"""
Location serializer class
"""
def validate_geopoint(self,value):
# whole code block doesnt run
import ipdb
ipdb.set_trace()
split_value = value.split(',')
lat = int(split_value[0])
long = int(split_value[1])
point = Point(long,lat)
return point
# pylint: disable=too-few-public-methods
class Meta(object):
"""
Meta options for LocationSerializer
"""
model = Location
fields = [
'id',
'name',
'country',
'geopoint',
'radius',
'shapefile',
'parent',
'created',
'modified'
]
Попытка добавления def validate_name (self, value) для сериализатора с оператором ipdb, и это, кажется, выполняется, но def validate_geopoint вообще не запускается.
Test:
serialize = LocationSerializer(data=data)
serialize.is_valid()
serialize.errors
Тогда яполучаю эту ошибку:
{'geopoint': [ErrorDetail(string='Unable to convert to python object: String input unrecognized as WKT EWKT, and HEXEWKB.', code='invalid')]}