On Thursday, September 15, 2011 6:29:04 PM UTC-4, Lennon wrote:
>
> I guess ideally they should be able to submit from either but if that 
> opens the app up to double submission than the most recent is fine as 
> long as I have a way to handle the old form gracefully as far as user 
> experience is concerned.  I'm open to ideas.
>

If there were two different forms in two different windows, I don't think 
that would be a double submission risk because each form could still only be 
submitted once (i.e., in order to submit the second form, the user would 
still have to manually fill it out and submit it -- there would be no danger 
that the same form data could be submitted twice). If you want to allow 
that, you would need to do something to ensure the name of the _formkey 
stored in the session is unique for each version of the form, so when a new 
form is created, it doesn't overwrite the value of the _formkey in the 
session but simply adds a new one. When a new form is created, something 
like the following is added to the session:

_formkey[form_name]='the_form_key' 

The problem is, by default, form.accepts() creates a standard form name 
(which is added to the form as a hidden field). Every time the form is 
created, the name will be the same, so _formkey[form_name] will be the same 
and will therefore get overwritten in the session. To avoid this, I suppose 
you could give the form a unique name every time it is created -- that 
should result in a separate session entry for each version of the form. When 
a form is submitted, you would then have to check request.vars for the 
_formname, and if found, assign that as the current form name so it will 
find the matching session key. Something like:

import uuid
formname=request.vars._formname or uuid.uuid4()
if form.accepts(request,session,formname=formname):
    etc.

Of course, I may be overlooking something, but I think something along those 
lines would work.

Anthony



Reply via email to