Hi Anthony, 
Yes you are right, only 30 (because they say so :)). 
Maybe IS_IN_SET approach can work. 
I'll come back to copy the solution if I'm be able to make it work.
Thank you very much for your time!

On Tuesday, May 7, 2013 4:11:00 PM UTC+2, Anthony wrote:
>
> OK, then maybe:
>
> admin_users = db(db.auth_membership.group_id == auth.id_group('Admin'))\
>               .select(db.auth_membership.user_id, projection=True)
> ...
> requires=IS_IN_DB(db(db.auth_user.id.belongs([r.id for r in admin_users
> ])), ...)
>
> I think GAE may limit the .belongs() to only 30 items, though, so if it 
> might contain more, you may need to build the list separately and use an 
> IS_IN_SET() validator instead. Others with GAE experience may have better 
> ideas.
>
> Anthony
>
> On Tuesday, May 7, 2013 9:55:37 AM UTC-4, José Manuel López wrote:
>>
>> Thank you Anthony for your help, 
>> The problem now is this: 
>> <type 'exceptions.RuntimeError'> Too many tables selected
>> Can be a problem that I'm over GAE?
>>
>> On Tuesday, May 7, 2013 3:43:32 PM UTC+2, Anthony wrote:
>>>
>>> yes, you are right, db.auth_user will return all the users table.
>>>
>>> please try to change 
>>>> Field('hotel_chain_manager', db.auth_user)
>>>> into
>>>> Field('hotel_chain_manager', 'reference auth_user', 
>>>> default=auth.has_membership('Admin'))
>>>>
>>>
>>> He wants to limit the options shown in the dropdown, not set a single 
>>> default value (also, auth.has_membership() returns True/False, not a user 
>>> ID).
>>>
>>> When you specify a reference field, you get a default IS_IN_DB 
>>> validator, but you can explicitly define your own, which enables you to 
>>> specify a Set object as the first argument to limit the records displayed 
>>> (see http://web2py.com/books/default/chapter/29/07#Database-validators):
>>>
>>> Field('hotel_chain_manager', 'reference auth_user',
>>>       requires=IS_IN_DB(db((db.auth_user.id == db.auth_membership.
>>> user_id) &
>>>                            (db.auth_group.id == db.auth_membership.
>>> group_id) &
>>>                            (db.auth_group.role == 'Admin')),
>>>                         'auth_user.id', db.auth_user._format),
>>>       represent=lambda id, row: db.auth_user._format % row)
>>>
>>> Note, when you explicitly specify the "requires" of a reference field, 
>>> you lose the default "represent" attribute, so you have to add that 
>>> explicitly as well.
>>>
>>> Anthony
>>>
>>>>

-- 

--- 
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/groups/opt_out.


Reply via email to