TypeError:Django距离中的float()参数必须是字符串或数字

14 投票
1 回答
45445 浏览
提问于 2025-04-20 14:07

我试着从我的模板中获取一个值,那个值是 kmdistance,但是当我查看页面时,它返回了一个错误。

这是我的 views.py 文件

def display_maps(request):
    #bases for city proper
    pnt = ButuanMaps.objects.get(clandpin='162-03-0001-017-33').geom

    #landproperty__sownerid__id=5 is for government user
    kmdistance = request.GET.get("kmtocity", None)
    mysection = (request.GET.get("mysection", None))
    query_section = Section.objects.all().order_by('id')
    ...
    query_maps = ButuanMaps.objects.filter(landproperty__sownerid__id=5, geom__distance_lte=(pnt, D(km=kmdistance)), ssectionid__id=mysection)
    ...

这是我的 template.html 文件

  <select name="kmtocity" class="form-control">
      <option type="text" value="empty">Select Km. away from City Proper</option>
      <option value="1">1</option>
      <option value="5">5</option>
      <option value="10">10</option>
      <option value="15">15</option>
      <option value="20">20</option>
   </select>

当我把这个值放在 distance 里时,它工作得很好。

1 个回答

8

当你在这里查找 request.GET 目录里的 kmdistance 时,如果找不到,它会默认给你一个空值(None)。

kmdistance = request.GET.get("kmtocity", None)

所以,当你稍后把这个空值转换成浮点数时,就会出现错误。

TypeError: float() argument must be a string or a number

为了解决这个问题,在你进行浮点数转换的地方,先检查一下 kmdistance 的值是否存在,然后再进行转换。

if kmdistance is not None:
    kmdistance = float(kmdistance)

另外,你也可以使用一个不同的默认值,比如用 0 代替 None(不过 0 的 kmdistance 可能意味着公里数不对,所以你可以用其他适合你的默认值,比如 100)。

撰写回答