On Monday, 17 October 2011 20:30:35 UTC+1, Jefferson Heard wrote:
>
> class FarmersMarket(ModelForm):
> class Meta:
> model = models.FarmersMarket
> exclude = ('location',)
>
> def clean(self):
> place, (lat, lng) = _g.geocode(self.cleaned_data['address'])
> self.cleaned_data['location'] = Point(lng,lat)
> return self.cleaned_data
>
> ----
>
> Here's my code minus the exception handling. Now what I *want* to
> have happen is that the models.FarmersMarket.location field on the
> model is set sometime shortly after the form is submitted by the user,
> by way of geocoding the data, rather than having them tediously enter
> a POINT wkt string in the textarea field. So my idea was to put a
> call to geopy.Google.geocode in FarmersMarket.self.clean. I can
> confirm clean() is getting called, but for some reason, the 'location'
> field isn't being set in the model. I get a whine from Django that
> the location field cannot be NULL (which is true, it can't).
>
> Can anyone tell me how I'm supposed to be doing this? I want them to
> enter an address on the form, not a latitude/longitude pair.
>
> -- Jeff
>
The point is, you've told Django that `location` isn't a field on this form,
by specifying it in `exclude`. So Django doesn't take any notice of the
extra element you've added in cleaned_data.
The way to do this is to override the form's save method and do it there:
def save(self, commit=False):
market = super(FarmersMarket, self).save(commit=False)
place, (lat, lng) = _g.geocode(market.address)
market.location = Point(lng,lat)
if commit:
market.save()
return market
--
DR.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/django-users/-/3LiBsqFIJYoJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.