When doing this :

db.define_table('mystringtest',
                Field('samplefield', 'string'),
                Field('mystringtest', 'list:string',
requires=IS_IN_SET(['test1', 'test2', 'test3'], multiple=True)),
                format='%(id)s: %(prompt)s')

The value stay selected in the multiselect html field...

Now, the question is what you intent to do with list:string web2py feature?

A kind of tag field?

If so, I think relying on web2py list:string is a bad idea... One the way
you try to make it works will prevent you from avoid duplicated tag, so it
will become a mess, or you will have to write a lot of code to make entry
unique in list:string field and it will never be fast since you will have
to parse all the record each time...

Richard

On Wed, Aug 12, 2015 at 9:12 PM, Richard Vézina <ml.richard.vez...@gmail.com
> wrote:

> I just fall on this trying to understand web2py list:string code :
>
>
> Also notice that this field gets a default represent attribute which
> represents the list of references as a comma-separated list of formatted
> references. This is used in read forms and SQLTABLEs.
>
> While list:reference has a default validator and a default representation,
>  list:integer and list:string do not. So these two need an IS_IN_SETor an
> IS_IN_DB validator if you want to use them in forms.
>
> It may be the reason of your issue, may try to use IS_IN_SET() maybe??
>
> Richard
>
> On Wed, Aug 12, 2015 at 8:53 PM, Richard Vézina <
> ml.richard.vez...@gmail.com> wrote:
>
>> They show in flash in 2.9.11 and 2.9.12...
>>
>> Though the widget doesn't displayed them...
>>
>> Do you see values in the flash message or not? From my understanding of
>> you last message you have them...
>>
>> So, if it the case, I am pretty sure it is a widget issue... This issue
>> seems to be there for a wild, I guess not much user have use this widget
>> with keepvalue=True and it pass silently...
>>
>> You can open a ticket and link this thread.
>>
>> You may link you dummy app a way to reproduce the issue.
>>
>> Richard
>>
>> On Wed, Aug 12, 2015 at 8:45 PM, Richard Vézina <
>> ml.richard.vez...@gmail.com> wrote:
>>
>>> If I bring your stuff into a dummy web2py app under web2py 2.9.5, the
>>> keeped values appears in the flash message... Though they are not appearing
>>> in the widget...
>>>
>>> I will try it under more recent version...
>>>
>>> wait
>>>
>>> On Wed, Aug 12, 2015 at 8:24 PM, Ian W. Scott <scotti...@gmail.com>
>>> wrote:
>>>
>>>> Hi Richard,
>>>>
>>>> Here's the packed app (list_string_test). I put a simple SQLFORM on the
>>>> default/index to demonstrate the problem. The first field is a simple
>>>> string field that keeps its values. The second field is a list:string field
>>>> that doesn't. Actually, the list:string widget doesn't get populated with
>>>> *any* of the submitted values. (I said before that the first one was kept,
>>>> but it isn't). The response.flash message also shows you the submitted
>>>> values for the list:string field, so you can see that on resubmission the
>>>> blank field really doesn't submit any values.
>>>>
>>>> Assuming that you see the same problem here, do you want me to create
>>>> the github issue or will you?
>>>>
>>>> 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 <scot...@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+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.

Reply via email to