But I want to be able to invalidate my form if geocoding fails... Can I still do that in the save method?
On Oct 18, 2011, at 4:52 AM, Daniel Roseman <dan...@roseman.org.uk> wrote: > 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 django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.