That makes so much sense! Thank you for explaining this to me, I did that 
and it finally works!

I also changed the variable name to be nums to make things clearer as well.

I am having trouble with inserting the items accordingly in the database, 
attached is a photo of a form submission I just did after filling out 3 
form instances in one session.

I think it is because of my forloop but I don't understand why. 
This is my code: 


def postform():
    nums = int(request.vars.nums)
    inputs = []
    update = db.post(request.args(0))
    for i in range(0, nums):
        inputs.append(db.post.patient.clone(name='%s_%s' % 
(db.post.patient.name, i)))
        inputs.append(db.post.attime.clone(name='%s_%s' % 
(db.post.attime.name, i)))
        inputs.append(db.post.age.clone(name='%s_%s' % (db.post.age.name, 
i)))
    form = SQLFORM.factory(Field('nums', readable=False, writable=False, 
default=nums),*inputs)
    if form.process().accepted:
        response.flash = 'Thanks! The form has been submitted.'
        for i in range(0,nums):
            db.post.insert(patient=form.vars['patient_%s' % i])
            db.post.insert(attime=form.vars['attime_%s' % i])
            db.post.insert(age=form.vars['age_%s' % i])
        redirect(URL('postlist'))
    elif form.errors:
        response.flash = 'form has errors'
    return dict(form=form)


I don't understand why the forloop would be generated 9 rows instead of 3?


On Tuesday, March 1, 2016 at 5:33:14 PM UTC-5, Dave S wrote:
>
>
>
> On Tuesday, March 1, 2016 at 2:19:53 PM UTC-8, aetag...@gmail.com wrote:
>>
>> What do you mean by passing it through url?
>>
>> I am obtaining the value that is entered using request.vars, if I wasn't 
>> passing the value then it wouldn't be creating the entered amount of form 
>> fields, and it does this correctly. It only raises this error when I try 
>> submitting the form, which is where I am confused.
>>
>>
> You have a manually created form in your HTML.  The action for this form 
> takes you to postform(), where you create an SQLFORM.factory form,
> using a dynamic number of inputs.  The action associated with *that* form 
> is again postform(), which looks for request.vars.name.  You need to make 
> sure the factory form has that field (it would be okay to make it a hidden 
> field, since the number shouldn't change).
>
> Or, perhaps have the first form controller be prepostform(), which does 
> nothing but record the number in the session. and then redirects to 
> postform(), which uses the number in the session to decide how many input 
> to build.
>
> One thing about both of these approaches is that once you've successfully 
> submitted the factory form, you're going to get a fresh copy with the same 
> number of inputs.  Unless you've set things up to retrieve the values that 
> were just entered into the DB, and present them back to the doctor for 
> verification and editing.
>
> As an aside, it looks odd to have a variable named "name" being used for a 
> count rather than a name-string.  In my own code, when I do that sort of 
> thing, I get confused during debugging.
>
> /dps
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to