David, thanks for that. I ended up going for the simple HTML method because, as you guessed, the SubmitField idea was a bit unwieldy for my needs.
Thanks for your help! Tom On 20 Feb, 15:37, David De La Harpe Golden <david.delaharpe.gol...@ichec.ie> wrote: > On Sat, Feb 20, 2010 at 06:42:11AM -0800, Tom wrote: > > Hi all, > > > I have a view that iterates over a queryset to produce a list of > > items. I have added a checkbox next to each item (from within the > > template) and have multiple 'submit' buttons that will do different > > things with the items selected. For example, one button will delete > > all the items selected. > > > My question is how can I detect which of the submit buttons has been > > pressed? Is there some property of 'request' that I can access that > > will tell my view which action to peform on the selected items? > > That is more a html thing than a django thing. > > Non-stone-age browsers will pass the particular submit button used > for a form with multiple submits - and only that button - as only > that button is "successful" (IIRC old IE used to do some wierd/dumb > thing involving the name and/or value but I've largely suppressed the > memory...) > > http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 > > (aside: You'll also still come across some ancient html tutorials claiming > forms are allowed exactly one submit button, that is > untrue)http://www.w3.org/TR/html401/interact/forms.html#submit-button > > i.e. given a POSTed form with two submit buttons > > <input type="submit" name="cancel" value="Cancel"/> > <input type="submit" name="accept" value="Accept"/> > > Check request.POST.get('cancel') to see if cancel was clicked, > and request.POST.get('accept') to see if accept was clicked. > > (remember someone curious can nonetheless construct a post request > with both accept and cancel just to see if your server logic > falls over in exploitable fashion) > > While django doesn't actually handle input type=submit for you, > there are "SubmitField" snippets floating about. They may have advantages > (e.g. form prefix handling, could in theory refuse to validate > if more than one SubmitField of the form was successful from a > malicious client, and maybe supply workarounds for that IE annoyance > I only vaguely recollect), but may be overkill - you could e.g. just > pass a "submit" dictionary down to the template, with a key and value > to use as the name of various submit buttons (just to avoid > hardcoding in the template) i.e. the above becomes (assuming you've > stuck the submit dictionary on the form): > > <input type="submit" name="{{form.submit.cancel}}" value="Cancel"/> -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@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.