2010-12-10 5 views
0

im Versuch, den Standort eines Benutzers zu suchen, die für diese Verwendung GeoIP ich habeUmwandlung Schwimmer in Dezimalzahlen (IP-Adresse Parameter)

Class register(models.Model): 

     user = models.ForeignKey('auth.User', unique = True) 
     latitude = models.DecimalField(max_digits=12, decimal_places=10) 
     longitude = models.DecimalField(max_digits=12, decimal_places=10) 
     Availability = models.CharField(max_length=8,choices=STATUS_CHOICES, blank= False, null=False) 
     Status = models.CharField(max_length=50, blank = True, null= True) 

und in forms.py ich habe

class registerForm(forms.ModelForm): 
     class Meta: 
      model=register 
      fields = ('Availability', 'Status')#'latitude','longitude', 

     def save(self,ip_address, *args, **kwargs): 
      g = GeoIP() 
      lat,lon = g.lat_lon(ip_address) 
      user_location = super(registerForm, self).save(commit=False) 
      user_location.latitude = lat 
      user_location.longitude = lon 
      user_location.save(*args, **kwargs) 

und in meine Ansichten ich habe

def status_set(request): 
    if request.method == "POST": 
     rform = registerForm(data = request.POST) 
    print "rejister form request" 
     if rform.is_valid(): 
      register = rform.save(ip_address='119.153.117.32') 
      register.user=request.user 
       register.save(ip_address) 
        return render_to_response('home.html') 
    else: 
     rform = registerForm() 
    return render_to_response('status_set.html',{'rform':rform}) 

i em die IP-Adresse als "119.153.117.32" zu nehmen, weil ich die Website von Local Loop und GeOI am Zugriff auf P hat kein lat, lon für die Amtsleitung (127.0.0.1). und es gibt keine für lokale Schleife zurück. \ Wenn ich das Formular übermittle, heißt es "Kann float nicht in Dezimal konvertieren. Konvertieren Sie zuerst den float in einen String". Wie kann ich dieses Problem lösen, ist es zwingend erforderlich, es in eine Zeichenfolge umzuwandeln oder gibt es eine bessere Möglichkeit, es zu tun.

Antwort

1

Verwenden Sie models.FloatField für Ihre Koordinaten anstelle von DecimalField, oder konvertieren Sie Ihre Floats in eine Zeichenfolge mit str (lat) usw., bevor Sie das Objekt speichern. Ich bin mir nicht sicher, ob DecimalField für Daten geeignet ist, die als Floats zurückkommen, daher würde ich es vorziehen, zu FloatField zu wechseln, aber das bedeutet, dass Sie Ihre Datenbank resynchronisieren müssen.

DecimalField ist wahrscheinlich für Sachen gedacht, die eine Python 'Dezimal' ist - siehe hier:

http://docs.python.org/library/decimal.html