De-selecting works the same as selecting multiple elements -- hold down CTRL and then click the option. If you want something a little more intuitive, you might look into the many available Javascript multi-select widgets.
Anthony On Saturday, January 30, 2016 at 12:29:50 PM UTC-5, Dave wrote: > > I was able to do some more testing and as I thought... everything works > fine now that I got rid of the typo. And without requires= it does the > right thing. > > One sorta related, but not really question... The <select multiple> box > that gets created by default for that type of field... Is there any way to > force it to put an option at the top for the equivalent of None? When > editing a row in the database admin under appadmin, I can't seem to > deselect all. In the real app, I will likely not allow the users to edit > that, so I will be handling updates through model code... but just thought > I would ask if there's an option in the Field definition I can add to force > the first item in the select box to be empty/None. It appears there isn't > a way for me to un-select in the browser once something is selected. > > Thanks again Anthony. > > On Friday, January 29, 2016 at 11:15:13 AM UTC-5, Anthony wrote: >> >> On Thursday, January 28, 2016 at 11:24:16 PM UTC-5, Dave wrote: >>> >>> Actually, maybe this is a bug. (or maybe just something that is not >>> supposed to work the way I am trying to use it...) >>> >>> If I turn off lazy_table support, everything works. I get a >>> multi-select box with the file_name populated (text area that I can >>> multi-select). >>> >> >> Actually, it is the reverse -- you get the multi-select box with >> lazy_tables=True, but not with lazy_tables=False. >> >> Here is how it works. The multi-select widget is generated automatically >> whenever a field has an IS_IN_DB(..., multiple=True) validator. >> Furthermore, list:reference fields automatically get an IS_IN_DB validator, >> but only when lazy_tables=True. The reason is that the IS_IN_DB validator >> is created when the auto_validators() function is called, and that function >> only assigns validators to reference fields if the referenced table name is >> in db.tables. Here is the order of operations in each case: >> >> lazy_tables=True: >> >> 1. At the end of db.define_table(), the new "tablename" is added to >> db.tables. >> 2. Sometime later, when db.tablename is accessed, the table is fully >> defined via db.lazy_define_table. >> 3. db.lazy_define_table calls auto_validators, which adds the >> IS_IN_DB validator because "tablename" is in db.tables (see #1). >> >> lazy_tables=False: >> >> 1. Before the end of db.define_table(), db.lazy_define_table is >> called (prior to the new "tablename" being added to db.tables). >> 2. db.lazy_define_table calls auto_validators, which does *not* add >> the IS_IN_DB validator because "tablename" is *not *yet in db.tables >> (see #1). >> 3. The new "tablename" is added to db.tables *after* >> db.lazy_define_table and auto_validators have already run. >> >> I'm not sure I would call it a bug, but I think we may be able to adjust >> the code to make it work in either case (possibly by simply adding the new >> tablename to db.tables *before* db.lazy_define_table is called within >> db.define_table -- though I'm not sure if that will introduce some other >> problem). >> >> Maybe open a Github issue and link to this thread. >> >> If you do not want to use lazy tables, there is a simple workaround -- >> just explicitly define the validator yourself: >> >> Field('children', 'list:reference file_entry', >> requires=IS_IN_DB(db, 'file_entry.id', '%(file_name)s', multiple= >> True)) >> >> It appears you tried to do that, but you did not use the keyword argument >> "requires" and instead passed the validator as the third positional >> argument (which is actually the "length" argument). >> >> Note, the same issue exists with the default "represent" attribute of the >> list:reference field -- you will need to use lazy tables or otherwise >> explicitly specify that attribute as well. >> >> Anthony >> >> -- 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.