You can do:

contact.districtId.requires = IS_IN_DB(db, 'district.id', '%
(salesmanId)s', zero=('select district'))
contact.districtId.represent = lambda id:
db.district(id).salesman.first_name

BUT mind that there will be two db queries every time you try
represent a districtID. I would not recommend it. I would cache the
salesman names or store then in table district.

On Jul 12, 3:37 pm, Jim Steil <j...@qlf.com> wrote:
> Hi
>
> I have the following tables/relations:
>
> contact has a district that has a district manager
>
> contact table has a district id
> district table has an auth_user id
>
> when editing a contact I want my dropdown to display my district number
> and the name of the manager.
>
> How would I specify my validator on contact.districtId to display the
> name of the manager from the auth_user table?
>
> I've tried:
>
> district = db.define_table('district',
>              Field('districtId', 'id'),
>              Field('districtNumber', 'integer', required=True,
>                    unique=True, label='District Number'),
>              Field('name', length=50, required=True, unique=True),
>              Field('salesmanId', db.auth_user, required=True,
>                    label='District Manager'),
>              Field('includeInArAging', 'boolean', required=True,
>                    label='Include in A/R Aging'),
>              Field('regionNumber', 'integer', label='Region Number'))
>
> district.districtNumber.requires = [IS_NOT_EMPTY(),
>                            IS_NOT_IN_DB(db, 'district.districtNumber')]
> district.name.requires = [IS_NOT_EMPTY(),
>                            IS_NOT_IN_DB(db, 'district.name')]
> district.salesmanId.requires = IS_IN_DB(db, db.auth_user,
>                                          '%(first_name)s %(last_name)s')
>
> contact = db.define_table('contact',
>              Field('contactId', 'id'),
>              Field('company', length=50),
>              Field('title', length=20),
>              Field('firstName', length=25, label='First Name'),
>              Field('lastName', length=25, label='Last Name'),
>              Field('address1', length=50, label='Address'),
>              Field('address2', length=50, label=''),
>              Field('city', length=30),
>              Field('state', length=2),
>              Field('zipCode', length= 10, label='ZIP Code'),
>              Field('county', length=30),
>              Field('districtId', db.district, required=True,
> label='District'),
>              Field('phone1', length=25),
>              Field('phone2', length=25),
>              Field('phone3', length=25),
>              Field('mobilePhone', length=25, label='Mobile'),
>              Field('pager', length=25),
>              Field('homePhone', length=25, label='Home'),
>              Field('fax', length=25),
>              Field('emailAddress', length=10, label='Email'),
>              Field('notes', 'text'),
>              Field('priceListDelivery', length=10, label='Price Lists Via'))
>
> contact.districtId.requires = IS_IN_DB(db, 'district.id',
> '%(salesmanId.first_name)s', zero=('select district'))
>
> ...but, I get an error on the salesmanId.first_name
>
> I believe I have a fundamental misunderstanding of the ways in which
> this works.  Any pointers would be appreciated...
>
>      -Jim

Reply via email to