преобразование числа с плавающей запятой в десятичное (параметр IP-адреса) - PullRequest
0 голосов
/ 11 декабря 2010

я пытаюсь найти местоположение пользователя, используя GeoIP для этого у меня есть

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)

и в forms.py у меня есть

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)

и, на мой взгляд, у меня есть

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}) 

Я принимаю IP-адрес как «119.153.117.32», потому что я получаю доступ к сайту из локального цикла, а у GeoIP нет широты для локального цикла (127.0.0.1). и он не возвращает ничего для локального цикла. \ когда я отправляю форму, он говорит: «Не удается преобразовать число с плавающей точкой в ​​десятичную. Сначала преобразовать число с плавающей точкой в ​​строку». Как я могу решить эту проблему, обязательно ли преобразовать его в строку или есть ли лучший способ сделать это.

1 Ответ

1 голос
/ 13 декабря 2010

Попробуйте использовать models.FloatField для ваших координат вместо DecimalField, или преобразовать ваши числа с плавающей точкой в ​​строку, используя str (lat) и т. Д. Перед сохранением объекта.Я не уверен, подходит ли DecimalField для данных, которые возвращаются в виде чисел с плавающей точкой, поэтому я предпочел бы перейти на FloatField, но это означает повторную синхронизацию вашей базы данных.

DecimalField, вероятно, предназначен для вещей, которые являются десятичными числами Python'- см. здесь:

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

...