web-dev-qa-db-fra.com

TypeError: l'argument float () doit être une chaîne ou un nombre dans Django distance

J'ai essayé d'obtenir la valeur de mon modèle qui est kmdistance mais il renvoie une erreur lorsque je visualise la page.

Voici le 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)
    ...

Voici le 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>

Cela fonctionne bien lorsque j'ai essayé de mettre la valeur à distance.

12
Sachi Tekina

Vous utilisez par défaut une valeur None lorsque le kmdistance ne se trouve pas dans le répertoire request.GET Ici

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

En tant que tel, lorsque vous convertissez None en un flottant plus tard, il génère une erreur

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

Pour surmonter cela, peu importe où vous vous convertissez en float, vérifiez simplement que la valeur kmdistance existe, puis convertissez-la en float

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

Alternativement, utilisez une valeur par défaut différente, comme 0 au lieu de None (bien que 0 kmdistance puisse impliquer une valeur incorrecte pour la distance en km, vous pouvez donc utiliser une autre valeur par défaut comme 100 qui fonctionne pour vous)

6
mu 無