web-dev-qa-db-ja.com

TypeError:float()引数は、Django distanceの文字列または数値でなければなりません

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>

値を距離に置いてみたときにうまく機能します。

12
Sachi Tekina

ここで_request.GET_ディレクトリにkmdistanceが見つからない場合、デフォルトではNone値になります。

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

そのため、後でNoneをfloatに変換すると、エラーがスローされます

_TypeError: float() argument must be a string or a number
_

これを克服するには、floatに変換する場所にかかわらず、kmdistance値が存在することを確認してから、floatに変換します。

_if kmdistance is not None:
    kmdistance = float(kmdistance)
_

または、Noneの代わりに0などの別のデフォルト値を使用します(ただし、0 kmdistanceはkm距離の間違った値を意味する可能性があるため、100のような別のデフォルト値を使用できます)

6
mu 無