Как создать мою собственную проверку уровня поля GeoDjango PointField - PullRequest
0 голосов
/ 17 мая 2018

В настоящее время я использую 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')]}

1 Ответ

0 голосов
/ 17 мая 2018

попробуйте переименовать ваш метод валидатора:

def validate_geopoint(self,value):
    ...

в:

def validate(self, value):
    ...

это должно помочь запустить его, django_rest_framework не следует той же логике в точности для форм,Но лучшей идеей, я думаю, будет проверка ввода в файле models.py.

...