2010-12-10 3 views
0

메신저 이것을 GeoIP가을 이용하여 사용자의 위치를 ​​찾으려고 I가(IP 주소 파라미터)

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) 

및에있을 내보기는 내가 로컬 루프와 GeoI에서 사이트에 액세스하고 있기 때문에

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

내가 그들을 "119.153.117.32"로 IP 주소를 가지고 있습니다 P는 로컬 루프 (127.0.0.1)에 대해 위도, 경도를 갖지 않습니다. 로컬 루프의 경우 아무 것도 반환하지 않습니다. "float을 10 진수로 변환 할 수 없다는 메시지가 나타나면 float을 문자열로 변환하십시오."라는 메시지를 submit 할 때 아무 것도 반환하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 문자열로 변환하는 것이 의무입니까 아니면 더 좋은 방법일까요?

답변

1

DecimalField 대신 좌표에 FloatField를 사용하거나 객체를 저장하기 전에 str (lat) 등을 사용하여 부동 소수점을 문자열로 변환 해보십시오. DecimalField가 Float로 되돌아 오는 데이터에 적합한 지 확신 할 수 없으므로 FloatField로 변경하는 것을 선호하지만 데이터베이스를 다시 동기화해야합니다.

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

다음을 참조하십시오 여기 -

DecimalField는 아마 파이썬 '소수'의 물건을위한 것입니다