I use IS_IN_DB with a set not the table directly...
analyst_set = db((db.auth_group.role=='analyst') &
(db.auth_user.id==db.auth_membership.user_id)
& (db.auth_membership.group_id==db.auth_group.id))
requires=IS_IN_DB(analyst_set,'auth_user.id','%(initials)s',\
multiple=True,cache=(cache.ram, 3600)),
So, maybe it is the IS_IN_DB validator that order the list at the end of
the process before returning the list to the DAL.
Richard
On Wed, May 2, 2012 at 11:12 PM, Massimo Di Pierro <
[email protected]> wrote:
> Are you talking about the IS_IN_SET() validator? I need to see some code.
> There is nothing in DAL that cases this. It must be a validator. So it
> depends on what you are using.
>
>
> On Wednesday, 2 May 2012 17:29:35 UTC-5, Richard wrote:
>>
>> Ok DAL do will return [1,2,3] in case of the user has select the first 3
>> element of the referenced table.
>>
>> What Choosen plugin return (and what I would to be stored in database
>> field) could be [1,3,2] or [3,1,2] or what ever other order in which the
>> user had pick those referenced elements. Choosen allow that when use
>> multiple option.
>>
>> So I would like that the DAL return at the database level the order in
>> which the element have been entered in the field in case of use of plugin
>> like choosen. Off course it is not applying if someone is not using a
>> plugin because you can't know in which order the element have been selected.
>>
>> Now, I think that what prevent the DAL to return a unordered list to the
>> database is the use of dict...
>>
>> I think I found a work around... But I didn't have time to implement
>> it... It consist of creating an other field to store the content of the
>> form.vars.field (list:reference field). So having 2 fields instead of 1...
>>
>> Hope it more clear.
>>
>> Richard
>>
>> On Wed, May 2, 2012 at 4:52 PM, Massimo Di Pierro <
>> [email protected]> wrote:
>>
>>> Richard, I am at a loss about this. the dal does not sort, nor does the
>>> validator. Can you show me and example to reproduce this sorting?
>>>
>>>
>>> On Thursday, 19 April 2012 16:14:50 UTC-5, Richard wrote:
>>>>
>>>> Issue 768 <http://code.google.com/p/web2py/issues/detail?id=768>: Allow
>>>> insert of unsorted or unordered list:reference type field values
>>>> On Thu, Apr 19, 2012 at 5:08 PM, Richard Vézina <
>>>> [email protected]> wrote:
>>>>
>>>>> Found this http://stackoverflow.com/****questions/1867861/python-**
>>>>> dicti**onary-keep-keys-values-**in-**same-order-as-declared<http://stackoverflow.com/questions/1867861/python-dictionary-keep-keys-values-in-same-order-as-declared>
>>>>> on
>>>>> stackoverflow where the most rated post redirect here :
>>>>> http://dev.pocoo.org/hg/**sandbo**x/raw-file/tip/odict.py<http://dev.pocoo.org/hg/sandbox/raw-file/tip/odict.py>
>>>>>
>>>>> Notice, it will download odict.py into your computer that contain a
>>>>> class supposing to allow preservation of initial order in a python dict...
>>>>>
>>>>> I think, it could be nice to have this class added to web2py in order
>>>>> to allow insert into database of unordered list:reference field input...
>>>>>
>>>>> Since this could be slow (not in case of few value I think), it could
>>>>> be a choice offer to the user like : list:reference sorted or
>>>>> list:reference unsorted...
>>>>>
>>>>> What do you think??
>>>>>
>>>>> Richard
>>>>>
>>>>>
>>>>> On Thu, Apr 19, 2012 at 4:59 PM, Richard Vézina <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Some progress...
>>>>>>
>>>>>> I just make a check and chosen plugin multiple select option return a
>>>>>> unordered list of the picked element by the user...
>>>>>>
>>>>>> So, now, I think that it could be nice if web2py allow some way to
>>>>>> determine in case of use of chosen kind of plugin to store a unordered
>>>>>> list
>>>>>> in list:reference field...
>>>>>>
>>>>>> I think that it is near line 207 (web2py 1.99.4) gluon/sqlhtml that
>>>>>> we have to make change :
>>>>>>
>>>>>> class OptionsWidget(FormWidget):
>>>>>>
>>>>>> @staticmethod
>>>>>> def has_options(field):
>>>>>> """
>>>>>> checks if the field has selectable options
>>>>>>
>>>>>> :param field: the field needing checking
>>>>>> :returns: True if the field has options
>>>>>> """
>>>>>>
>>>>>> return hasattr(field.requires, 'options')
>>>>>>
>>>>>> @classmethod
>>>>>> def widget(cls, field, value, **attributes):
>>>>>> """
>>>>>> generates a SELECT tag, including OPTIONs (only 1 option
>>>>>> allowed)
>>>>>>
>>>>>> see also: :meth:`FormWidget.widget`
>>>>>> """
>>>>>> default = dict(value=value) # HERE!!!!!!!!
>>>>>>
>>>>>> I am not pretty sure actually... And I don't really know, what could
>>>>>> be done to keep submit multiple list order in case of plugin use...
>>>>>>
>>>>>> I try naively to replace
>>>>>>
>>>>>> default = dict(value=value)
>>>>>>
>>>>>> By
>>>>>>
>>>>>> defautl = value
>>>>>>
>>>>>> But it failed.
>>>>>>
>>>>>> Richard
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Apr 19, 2012 at 3:43 PM, Richard Vézina <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> This is a part of the solution I think :
>>>>>>>
>>>>>>> http://www.ryancramer.com/**jour**nal/entries/select_**multiple/<http://www.ryancramer.com/journal/entries/select_multiple/>
>>>>>>>
>>>>>>> Richard
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Apr 19, 2012 at 3:08 PM, Richard <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> I would know if there is a way to tell to list:reference to not
>>>>>>>> order the id of the reference table to keep the order in wich the user
>>>>>>>> has
>>>>>>>> pick those element... At the same time I just thought that this
>>>>>>>> concept is
>>>>>>>> useless except in case you use some javascript plugin like Chosen
>>>>>>>> Multiple
>>>>>>>> Select
>>>>>>>> (http://harvesthq.github.com/**c**hosen/<http://harvesthq.github.com/chosen/>)
>>>>>>>> because, you pick the element in a list and there is no way to know
>>>>>>>> which
>>>>>>>> element in the list the user has selected first.
>>>>>>>>
>>>>>>>> My need is to allow users to select element from an other table and
>>>>>>>> keep a more informative those selected thing. Like the ingredient on
>>>>>>>> the
>>>>>>>> back panel of food box, the first ingredient more abondant than the
>>>>>>>> second
>>>>>>>> an so on.
>>>>>>>>
>>>>>>>> So, for now I think I am stock with a text field. I would avoid a
>>>>>>>> free text field because I would prefer user to always use the same
>>>>>>>> name for
>>>>>>>> the same thing, but I can't do it with text type field. What I thought
>>>>>>>> is a
>>>>>>>> list:reference field and a button beside the field to allow allow user
>>>>>>>> to
>>>>>>>> add missing element name in the foreign table if need without leave the
>>>>>>>> original form. This can be done easily with the select or add web2py
>>>>>>>> slice
>>>>>>>> : http://www.web2pyslices.com/****slice/show/1446/widget-select-***
>>>>>>>> *or-add-option<http://www.web2pyslices.com/slice/show/1446/widget-select-or-add-option>.
>>>>>>>> Thanks to the author.
>>>>>>>>
>>>>>>>> But, I think that keeping the order of the selected element can't
>>>>>>>> be done??
>>>>>>>>
>>>>>>>> Thanks for help.
>>>>>>>>
>>>>>>>> Richard
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>