2010-11-26 61 views
1

i cette chose dans mon fichier models.pygéocodage une adresse IP et enregistrer à l'aide des formulaires modèles

 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) 

et forms.py j'ai

class registerForm(forms.ModelForm): 

     class Meta: 
     model=register 
      fields = ('latitude', 'longitude', 'Availability', 'Status') 

maintenant ce que je veux ici est de géocodage l'adresse IP de l'utilisateur et obtenir la latitude et la longitude automatiquement après le géocodage de l'IP et l'enregistrer dans la base de données. Je ne veux pas permettre à l'utilisateur d'entrer le latitide et la longitude manuellement car ce sera un impair et certainement personne ne voudra le faire manuellement. J'utilise GeoIP pour géocoder l'adresse IP. et dans mon views.py j'ai

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

je cherche un moyen d'obtenir automatiquement la latitude, de la GeoIP lon et le placer dans le champ de latitude longitude dans les formes afin que les utilisateurs ne doivent pas manuellement entrez-le. puis, après avoir saisi le statut et la disponibilité, les formulaires peuvent être enregistrés dans la base de données. toute aide serait grandement appréciée

Répondre

1

Ecraser la méthode de sauvegarde de formulaire pour remplir la latitude & longitude

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) 
+0

j'ai écraser le save method mais les django aboient comme "save() prend à lea st 2 arguments non-mot-clé (1 donné) " – MajorGeek

+0

vous pourriez l'avoir fonctionné maintenant, sinon en appelant la méthode save de la vue passer l'ip_address de la demande en tant que paramètre. – Ashok

0

changez cette ligne

register = rform.save(commit=False) 

à

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