GeoDjango: ValueError, не удалось преобразовать строку в число с плавающей точкой - PullRequest
0 голосов
/ 13 октября 2019

Вчера у меня была такая же проблема с этой простой моделью, и мне удалось ее решить.

Сегодня я изменил следующую модель :

from django.contrib.gis.db import models
from django.contrib.gis.geos import Point

from mapbox_location_field.models import LocationField

class IllegalDumpCategory(models.Model):
    category = models.CharField(
        max_length=50,
    )
    slug = models.SlugField(
        max_length=50,
        unique=True,
    )
    description = models.TextField(
        max_length=500,
    )


class IllegalDumpGeo(models.Model):
    user_name = models.CharField(
        'Username',
        max_length=50,
    )
    user_name_email = models.EmailField(
        'Email',
        max_length=254,
    )
    description = models.TextField(
        max_length=500,
    )
    image_1 = models.ImageField(
        upload_to='%Y/%m/%d',
        blank=False,
        null=False,
    )
    image_2 = models.ImageField(
        upload_to='%Y/%m/%d',
        blank=True,
        null=True,
    )
    image_3 = models.ImageField(
        upload_to='%Y/%m/%d',
        blank=True,
        null=True,
    )
    volume_extension = models.PositiveIntegerField(
        blank=False,
        null=False,
    )
    link = models.URLField(
        blank=True,
        null=True,
    )
    waste_type = models.ForeignKey(
        IllegalDumpCategory,
        on_delete=models.CASCADE,
    )
    geom = models.PointField(
        blank=True,
        null=True,
    )
    location = LocationField()


    def __int__(self):
        return self.pk

    def save(self, *args, **kwargs):
        lat = self.location[0]
        lon = self.location[1]
        self.geom = Point(x=lon, y=lat, srid=4326)
        super(IllegalDumpGeo, self).save(*args, **kwargs)

    @property
    def coordinates(self):
        return str(self.geom.x) + ', ' + str(self.geom.y)

Я пытаюсь добавить некоторые пункты через панель администратора, но снова вижу эту ошибку:

ValueError could not convert string to float:
'6.01245266838146,-10.16992187499897'

Почему это происходит?

Traceback здесь

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Ошибка на самом деле является ошибкой в ​​django-mapbox-location-field

Измените строку 6 этого файла: mapbox_location_field / widgets.py и измените ее на:

def parse_tuple_string(tuple_string): return tuple(map(float, tuple_string[1:-1].split(",")))

Примечание. Я удалил пробел после запятой в методе split.

Это исправляет это. Я думаю, что я должен отправить в PR

0 голосов
/ 14 октября 2019

Ну, кажется немного странным, но, глядя на Traceback, я думаю, что нашел проблему:

File "/home/max/Django/gealogos/devenv/lib/python3.6/site-packages/mapbox_location_field/widgets.py"
in parse_tuple_string
  6.     return tuple(map(float, tuple_string[1:-1].split(", ")))

Метод tuple(map(float, tuple_string[1:-1].split(", "))) пытается разделить входные данные на ', ' (запятая, за которой следует пробел ), но вы передаете следующий lan_lon: '6.01245266838146,-10.16992187499897', в котором после запятой нет пробела и, следовательно, split не работает должным образом, что приводит к попытке приведенияполная строка '6.01245266838146,-10.16992187499897' как float().

Вам нужно найти и исправить часть вашего кода, которая создает строку lat_lon (не могу найти ее в вашем вопросе, поэтому я не могу помочь больше. может быть частью widget, может быть?) для включения пробела после запятой между координатами:

'lon_coord,<space>lat_coord'

Должно привести к этой строке для вашего случая:

'6.01245266838146, -10.16992187499897'
...