That works perfectly, thanks Niphlod!

On Mon, Dec 1, 2014 at 8:54 PM, Niphlod <niph...@gmail.com> wrote:

> why reinventing the wheel ? IS_IN_DB takes a Set...
>
> gr = db.auth_group
> me = db.auth_membership
> us = db.auth_user
>
> theset = db(
>    (us.id == me.user_id) &
>    (gr.id == me.group_id) &
>    (gr.role == 'roletest')
> )
>
> ....
> Field('a_field', requires=IS_IN_DB(theset, 'auth_user.id',
> '%(first_name)s - %(last_name)s'))
>
>
>
>
>
> On Monday, December 1, 2014 4:04:32 PM UTC+1, Andrew Buchan wrote:
>>
>> Hi,
>>
>> I wanted to create a validator which creates a dropdown of users in a
>> certain auth group.
>> I figured I could shortcut this by inheriting from IS_IN_SET, see class
>> below.
>> This works fine for SQLFORMS in create mode (drop dow with just what I
>> want to see) and for read-only mode (I see the user name, not the id) , but
>> for a SQLFORM in edit mode which is pointing at an existing record, it
>> doesn't pre-select the entry in the options drop-down.
>>
>> Any ideas on how I go about getting this to work, or is there a simpler
>> solution?
>>
>> If you use this validator in the DAL, you can see the result the admin
>> pages, so you have an easy way to test if you want to play around with it.
>>
>> Thanks,
>>
>> class IS_USER_IN_GROUP(IS_IN_SET):
>>     """A validator that can be used like "requires = IS_USER_IN_GROUP()"
>>     Provides a drop down of users in that group.
>>     """
>>     def __init__(self, group_name):
>>         keys = []
>>         labels = []
>>         staff_groups = db((db.auth_user.id==db.auth_membership.user_id)
>> & (db.auth_group.id==db.auth_membership.group_id))
>>         rows = staff_groups(db.auth_group.role ==
>> group_name).select(db.auth_user.ALL, orderby=db.auth_user.first_
>> name|db.auth_user.last_name)
>>         for user in rows:
>>             keys.append(user.id)
>>             labels.append('%s %s' % (user.first_name, user.last_name))
>>         IS_IN_SET.__init__(self, keys, labels)
>>
>>     def formatter(self, user_id):
>>         hits = db(db.auth_user.id == user_id).select()
>>         if len(hits) == 1:
>>             user = hits.first()
>>             return '%s %s' % (user.first_name, user.last_name)
>>         return ''
>>
>  --
> 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 a topic in the
> Google Groups "web2py-users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/web2py/oTzLZILrg9E/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

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

Reply via email to