GeoDjango:ValueError,无法将字符串转换为浮点型

时间:2019-10-13 12:58:28

标签: python django django-models mapbox geodjango

昨天我在this简单模型上遇到了同样的问题,并且设法解决了这个问题。

今天,我已经修改了以下模型

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'

为什么会这样?

跟踪here

2 个答案:

答案 0 :(得分:2)

该错误实际上是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方法中删除了逗号后的空格。

可以解决此问题。 我想我应该发送公关

答案 1 :(得分:0)

看起来有些奇怪,但通过查看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'