对IP进行地理编码并使用模型表单进行保存

时间:2010-11-26 00:25:39

标签: django django-forms geocoding geoip

我在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进行地理编码并将其保存到数据库后自动获取经度和纬度。我不想让用户手动输入latitide和经度,因为这将是一个奇怪的,绝对没有人愿意手动。 我正在使用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获取lat,lon并将其放置在窗体的纬度经度字段中,这样用户就不必手动输入它。然后在输入状态和可用性后,表单可以保存到数据库中。 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

覆盖表单的save方法以填充latitude&经度

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)

答案 1 :(得分:0)

更改此行

register = rform.save(commit=False)

register = rform.save(ip_address=request.META['REMOTE_ADDR'])