Sure, I'll post a dummy app here. It'll probably be later tonight or tomorrow.
Ian On Wednesday, August 12, 2015 at 2:04:28 PM UTC-4, Richard wrote: > > 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 <[email protected] > <javascript:>> 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 <[email protected]> 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 <[email protected]> >>>>> 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 [email protected]. >>>>>> 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 [email protected]. >>>> 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 [email protected] <javascript:>. >> 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 [email protected]. For more options, visit https://groups.google.com/d/optout.

