1

私はmodels.pyファイルにこれを持っています

        user = models.ForeignKey('auth.User', unique = True) 
        latitude = models.DecimalField(max_digits=8, decimal_places=6)
        longitude = models.DecimalField(max_digits=8, decimal_places=6)
        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 = ('latitude', 'longitude', 'Availability', 'Status')

ここで必要なのは、ユーザーの IP アドレスをジオコーディングし、IP をジオコーディングした後に自動的に緯度と経度を取得してデータベースに保存することです。ユーザーが緯度と経度を手動で入力できるようにしたくありません。これは奇妙なものであり、間違いなく誰も手動で入力したくないでしょう。私は GeoIP を使用して IP アドレスをジオコーディングしています。そして私のviews.pyには

def Userlocation(request):
    if request.method == "POST":
        rform = registerForm(data = request.POST)
        if rform.is_valid():
            register = rform.save(commit=False)
            register.user=request.user
            register.save()
            return render_to_response('home.html')
    else:
        rform = registerForm() 
    return render_to_response('status_set.html',{'rform':rform}) 

GeoIP から緯度経度を自動的に取得し、それをフォームの緯度経度フィールドに配置して、ユーザーが手動で入力する必要がないようにする方法を探しています。ステータスと可用性を入力した後、フォームをデータベースに保存できます。どんな助けでも大歓迎です

4

2 に答える 2

1

フォームの保存メソッドを上書きして緯度と経度を入力します

from django.contrib.gis.utils import GeoIP
class registerForm(forms.ModelForm): 
    class Meta:
        model=register
        fields = ('Availability', 'Status')

    def save(self, ip_address, *args, **kwargs):
        g = GeoIP()
        lat, lon = `get the lat & lng`
        user_location = super(registerForm, self).save(commit=False)
        user_location.latitude = lat
        user_location.longitude = lon
        user_location.save(*args, **kwargs)
于 2010-11-26T00:57:57.237 に答える
0

この行を変更

register = rform.save(commit=False)

register = rform.save(ip_address=request.META['REMOTE_ADDR'])
于 2010-12-13T22:37:51.500 に答える