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

Sac*_*ina 13 python django openlayers

我试图从我的模板中获取值,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)
    ...
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

当我尝试将值放在距离时,它工作正常.

mu *_*u 無 7

如果kmdistancerequest.GET此处的目录中找不到,则默认为None值

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

因此,当您稍后将None转换为float时,会引发错误

TypeError: float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,无论您在何处转换为float,只需检查kmdistance值是否存在,然后将其转换为float

if kmdistance is not None:
    kmdistance = float(kmdistance)
Run Code Online (Sandbox Code Playgroud)

或者,使用不同的默认值,例如0而不是None(虽然0 kmdistance可能意味着km距离的错误值,因此您可以使用另一个默认值,如100适用于您)