2014-09-09 14 views
8

Ho provato ad ottenere il valore dal mio modello che è kmdistance ma restituisce un errore quando visualizzo la pagina.TypeError: float() argomento deve essere una stringa o un numero in distanza Django

Ecco il 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) 
    ... 

Ecco il 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> 

Funziona bene quando ho provato a mettere il valore della distanza.

risposta

4

Si inadempiente ad un valore None quando il kmdistance non si trova nella directory request.GET qui

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

Come tale, quando si converte Nessuno ad un galleggiante in seguito, si getta su un errore

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

per ovviare a questo, ovunque si sta convertendo a stare a galla, basta controllare che il valore kmDistanza esiste, e quindi convertirlo in galleggiare

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

In alternativa, utilizzare un valore predefinito diverso, come 0 invece di None (anche se 0 kmDistanza può implicare un valore errato per km di distanza, in modo da poter utilizzare un altro valore di default come 100 che funziona per voi)

+0

Ok, quindi come far sapere a Django che è float o numero? Ho rimosso 'Nessuno', ma genera lo stesso errore. –

+0

@SachiTekina In questa istruzione, 'query_maps = ButuanMaps.objects.filter (landproperty__sownerid__id = 5, geom__distance_lte = (pnt, D (km = km di distanza)), ssectionid__id = mysection)', si usa 'geom__distance_lte', il che significa che sarà confrontando con la distanza. Dovrebbe essere qui che la conversione in float deve avvenire internamente. Questo sembra un deposito che devi passare, quindi l'inadempienza a un valore sufficientemente grande sarebbe un'opzione migliore qui. –

+0

Grazie! Penso che imposterò la distanza predefinita su un valore più alto perché voglio semplicemente recuperare tutte le geom se l'utente non ha selezionato la distanza. –