On Wednesday, March 2, 2016 at 7:31:19 AM UTC-8, [email protected] wrote: > > Yes this is ideal but I didn't think that would be possible to implement, > because with this way the amount of columns would vary with each row and I > am unsure of how possible it is to make it work because of that > > Say what? The number of columns is fixed in the table definition.
If you omit a field value in the insert, then typically a None value or a default value is inserted. Just as in your screenshot. Fill in the columns you know, all in one call, and be done. /dps > On Wednesday, March 2, 2016 at 5:12:06 AM UTC-5, Dave S wrote: >> >> >> >> On Tuesday, March 1, 2016 at 7:33:38 PM UTC-8, [email protected] wrote: >>> >>> 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? >>> >>> >> Shouldn't the 3 inserts be combined into 1, that sets all 3 fields? >> >> /dps >> >> >> >>> >>> 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, [email protected] >>>> 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 [email protected]. For more options, visit https://groups.google.com/d/optout.

