Hopefully my last question on this, How do I get back to the page with the form, perhaps with a "Thank You" message, without having the POST still available if you hit refresh. I figured I'd use 'reverse' but not quite sure why it isn't working ...
Here's where I am now: #views.py def record_detail(request, slug): record = Record.objects.get(slug=slug) if request.method == 'POST': form = RatingForm(request.POST) if form.is_valid(): record_rating = Rating() record_rating.item_id = record.id record_rating.writer_id = request.user.id record_rating.rating = form.cleaned_data['rating'] record_rating.save() return render_to_response(reverse('record_detail', args=[slug])) else: form = RatingForm() return render_to_response('records/detail.html', {'record_detail': record, 'form': form}, context_instance=RequestContext(request)) I get the below error. NoReverseMatch at /records/temp-record-name/ Reverse for 'record_detail' with arguments '(u'temp-record-name',)' and keyword arguments '{}' not found. And even if it does get passed back to the original page, how would I have a "Thank You" message? Thanks again, d On Jul 16, 10:49 am, Russell Keith-Magee <freakboy3...@gmail.com> wrote: > On Thu, Jul 16, 2009 at 8:36 AM, The Danny Bos<danny...@gmail.com> wrote: > > > Any ideas on this one guys? > > > I gave up on it last night. > > I feel way off ... > > Ok - some back tracking. > > Your first approach (no forms) should have worked. The reason you > didn't get any errors is that your code is explicitly ignoring _all > errors_. You are catching all exceptions, passing, and moving on. That > means that if an error - ANY minor error - is thrown in your 'form > processing' code, then it will be silently ignored. > > Step 1 - Make it be not silent. Instead of using: > > except: > pass > > try using > > except Exception, e: > print 'ERROR!!', e > > And see what it says. You will probably find that it's something > really simple, like a typo in a variable name somewhere. Fix those > issues, and you should find things start to work- the general approach > you describe should be fine. > > Your second attempt, using forms, can be made to work in a number of ways. > > 1) Save the values back from the form. > > record_rating.rating = form.cleaned_data['rating'] > record_rating.record_id = form.cleaned_data['record'] > record_rating.writer_id = form.cleaned_data['writer'] > > I would also note that your form probably won't have values for record > and writer - because they are hidden inputs and you're not providing > initial values. Look into the `initial` argument to fields, or to the > form as a whole. > > 2) Don't put the values on the form in the first place. After all - > they're hidden inputs. > > class RatingForm(forms.Form): > rating = forms.ChoiceField(choices=RATING_CHOICES) > ... > record_rating.rating = form.cleaned_data['rating'] > record_rating.record = Record.objects.get(....) > record_rating.writer = Writer.objects.get(....) > > 3) Look at using a ModelForm. This will handle the saving of the > entire Rating object; however, given that you seem to want to use > hidden inputs, you will need to jump through some extra hoops to > override the default widgets. Overriding widgets is covered in the > docs. > > Yours, > Russ Magee %-) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---