>
> 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 

>
>
> hope this can help
>
> best regards
>
> On Tuesday, May 7, 2013 7:24:05 AM UTC-4, José Manuel López wrote:
>>
>>
>>
>> Hi!, 
>> Thank you for your answer, but it's not exactly what I want. 
>> I'll explain better:
>> Let's say I have this table:
>> db.define_table('Hotel',
>>                 Field('name', label="Nombre del Hotel "),
>>                                Field('hotel_type', db.BookingCategory),
>>                 Field('hotel_chain_manager', db.auth_user))
>>
>> And now I've a SQLFORM.grid like this:
>>
>>
>>     form = SQLFORM.grid(db.Hotel,
>>                         searchable=True,
>>                         deletable=True,
>>                         details=True,
>>                         selectable=False, 
>>                         create=True,
>>                         sortable=True, 
>>                         fields=fields, 
>>                         paginate=100, 
>>                         maxtextlength=75, 
>>                         links_in_grid=True)
>>
>> as you can see, it is editable, but the Field "hotel_chain_manager" in the 
>> form will be populated with ALL the users in db. This is not what I want, I 
>> want that this field will be populated *only with the users in the 
>> "Admin" membership*.
>>
>> Kind Regards!!
>>
>> On Tuesday, May 7, 2013 10:36:04 AM UTC+2, 黄祥 wrote:
>>>
>>> i think you can achieve it (in controller using grid) with 
>>> editable = auth.has_membership('Admin')
>>>
>>> e.g.
>>> def booking():
>>>     has_membership=auth.has_membership('Admin')
>>>     grid=SQLFORM.grid(db.booking, editable=has_membership)
>>>     return locals()
>>>
>>> best regards
>>>
>>> On Tuesday, May 7, 2013 3:16:11 PM UTC+7, José Manuel López wrote:
>>>>
>>>> Hi, 
>>>> I've a " form = SQLFORM.grid " that let the user edit the rows. 
>>>> In the edit form I want that one of the field populated only with 
>>>> "Admins". Now I have this field populated with all the db.auth_user and is 
>>>> huge and very hard to find the correct user. 
>>>> How can I do it?, I'm thinking in something like:
>>>> *db.Hotel.chainManager **=IS_IN_DB( ¿¿??? )*     .... how to express 
>>>> only users with Admin membership?.
>>>>
>>>> Thank you.
>>>>
>>>

-- 

--- 
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