Я делаю нечто подобное в моей UserProfile
модели. У меня есть поле с почтовым индексом, которое, если оно заполнено пользователем, используется для гео-поиска, чтобы получить город / штат и lat / lng и сохранить их в соответствующих полях в модели:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
...
zip = models.CharField(max_length=12, blank=True, null=True)
city_state = models.CharField(max_length=30, blank=True, null=True)
lat = models.DecimalField(max_digits=12, decimal_places=9, blank=True, null=True)
lng = models.DecimalField(max_digits=12, decimal_places=9, blank=True, null=True)
def save(self, *args, **kwargs):
if self.zip:
(city_state, lat, lng) = get_lat_lng(self.zip)
if city_state and lat and lng:
self.city_state = city_state
self.lat = lat
self.lng = lng
super(UserProfile, self).save(*args, **kwargs)
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
fields = ('zip',)
Обратите внимание, что поле zip
производной формы является единственным, видимым для пользователя.