Hi Ian, Can you pack a dummy app with a list:string field an single field form with SQLFORM.factory so I can try it here and confirm your issue...
Also, can you tell us which web2py version you use. Thanks Richard PS.: Once I confirm I have the issue we should open a ticket on github... # On Wed, Aug 12, 2015 at 1:41 PM, Ian W. Scott <scotti...@gmail.com> wrote: > No, they're not submitted if I re-submit the form with the preserved > values. > > Ian > > On Wednesday, August 12, 2015 at 1:25:01 PM UTC-4, Richard wrote: >> >> Is the form widget only display the last input but insert the other >> values? I mean, it may be possible that values are there but not correctly >> display by the widget... >> >> Richard >> >> On Wed, Aug 12, 2015 at 1:21 PM, Ian W. Scott <scot...@gmail.com> wrote: >> >>> Sorry if I'm not explaining this well. The default widget for a >>> list:string field is a vertically stacked list of inputs, one per value. >>> There is a little + at right that allows me to add more inputs to the list >>> dynamically. >>> >>> In a SQLFORM, when I set keepvalues=True the values are preserved in the >>> form fields after form submission. But only one of the inputs from the >>> list:string widget is left, holding just the last string value submitted >>> for that field. In other words, the form doesn't remember the additional >>> inputs I added to the widget (by clicking +) before submission, and it >>> forgets the submitted values from those additional inputs as well. >>> >>> I've experienced this on many forms, so I don't think it's my code. In >>> the case that brought this up for me again, I'm creating a SQLFORM.factory >>> with the fields defined in the controller. (You can see that I've got some >>> for loops to simplify the creation and processing of a large number of >>> fields, but otherwise it's straightforward.) The problem appears with the >>> widgets for any of the list:string fields: >>> >>> >>> message = '' >>> output = '' >>> >>> flds = [Field('label_template', 'string'), >>> Field('words', 'list:string'), >>> Field('aligned', 'boolean'), >>> Field('avoid', 'list:string'), >>> Field('testing', 'boolean')] >>> >>> >>> for n in ['one', 'two', 'three', 'four', 'five']: >>> fbs = [Field('{}_prompt_template'.format(n), 'list:string'), >>> Field('{}_response_template'.format(n), 'list:string' >>> ), >>> Field('{}_readable_template'.format(n), 'list:string' >>> ), >>> Field('{}_tags'.format(n), 'list:reference tags', >>> requires=IS_IN_DB(db, 'tags.id', '%(tag)s', >>> multiple=True)), >>> Field('{}_tags_secondary'.format(n), 'list:reference >>> tags', >>> requires=IS_IN_DB(db, 'tags.id', '%(tag)s', >>> multiple=True)), >>> Field('{}_tags_ahead'.format(n), 'list:reference >>> tags', >>> requires=IS_IN_DB(db, 'tags.id', '%(tag)s', >>> multiple=True)), >>> Field('{}_npcs'.format(n), 'list:reference npcs', >>> requires=IS_IN_DB(db, 'npcs.id', '%(name)s', >>> multiple=True)), >>> Field('{}_locations'.format(n), 'list:reference >>> locations', >>> requires=IS_IN_DB(db, 'locations.id', >>> '%(map_location)s', >>> multiple=True)), >>> Field('{}_instructions'.format(n), >>> 'list:reference step_instructions', >>> requires=IS_IN_DB(db, 'step_instructions.id', >>> '%(instruction_label)s', >>> multiple=True)), >>> Field('{}_hints'.format(n), 'list:reference >>> step_hints', >>> requires=IS_IN_DB(db, 'step_hints.id', >>> '%(hint_label)s', >>> multiple=True)), >>> Field('{}_step_type'.format(n), 'list:reference >>> step_types', >>> requires=IS_IN_DB(db, 'step_types.id', >>> '%(step_type)s', >>> multiple=True)), >>> Field('{}_image_template'.format(n), 'string')] >>> flds.extend(fbs) >>> form = SQLFORM.factory(*flds) >>> >>> >>> if form.process(keepvalues=True).accepted: >>> vv = request.vars >>> stepsdata = [] >>> for n in ['one', 'two', 'three', 'four', 'five']: >>> nkeys = [k for k in vv.keys() if re.match('{}.*'.format( >>> n), k)] >>> filledfields = [k for k in nkeys if vv[k] not in ['', >>> None]] >>> if filledfields: >>> ndict = {k: vv[k] for k in nkeys} >>> stepsdata.append(ndict) >>> if isinstance(vv['words'], list): >>> wordlists = [w.split('|') for w in vv['words']] >>> else: >>> wordlists = [vv['words'].split('|')] >>> paths = self.make_path(wordlists, >>> label_template=vv.label_template, >>> stepsdata=stepsdata, >>> testing=vv.testing, >>> avoid=vv.avoid, >>> aligned=vv.aligned >>> ) >>> message, output = self.make_output(paths) >>> >>> >>> elif form.errors: >>> message = BEAUTIFY(form.errors) >>> >>> >>> >>> >>> >>> >>> >>> >>> On Wednesday, August 12, 2015 at 11:04:46 AM UTC-4, Richard wrote: >>>> >>>> Could you show your model and controller... >>>> >>>> This make no sens... >>>> >>>> Richard >>>> >>>> On Wed, Aug 12, 2015 at 10:45 AM, Ian W. Scott <scot...@gmail.com> >>>> wrote: >>>> >>>>> I never got any suggestions on this, even though it seems like a >>>>> significant limitation of the widget. Has anyone come up with a solution >>>>> for keeping all the values in a list:string field after form submission? >>>>> >>>>> Thanks. >>>>> >>>>> >>>>> On Wednesday, June 25, 2014 at 11:33:26 AM UTC-4, Ian W. Scott wrote: >>>>>> >>>>>> I've got a SQLFORM.factory form set to keep values after processing >>>>>> with process(keepvalues=True). But it doesn't work on a list:string >>>>>> field. >>>>>> The (otherwise very nice) widget loses all but the first value when the >>>>>> form is submitted (i.e., all but the first text inputs for the field >>>>>> disappear). Is there any way to carry those other text inputs and their >>>>>> values over? >>>>>> >>>>>> >>>>>> -- >>>>> 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+un...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> 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+un...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > 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. > -- 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.