>
> 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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.