0

このために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) の緯度経度がないためです。ローカルループには何も返されません.\フォームを送信すると、「浮動小数点数を10進数に変換できません。最初に浮動小数点数を文字列に変換してください」と表示されます。この問題を解決するにはどうすればよいですか?それを文字列に変換することが義務付けられているか、それを行うためのより良い方法があります.

4

1 に答える 1

1

オブジェクトを保存する前に、DecimalField の代わりに座標に models.FloatField を使用するか、str(lat) などを使用して float を文字列に変換してみてください。float として返されるデータに DecimalField が適切かどうかわからないので、FloatField に変更したいと思いますが、それはデータベースを再同期することを意味します。

DecimalField はおそらく Python の「10 進数」のものを対象としています - ここを参照してください:

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

于 2010-12-13T08:30:08.740 に答える