Thanks all, got it working.  One correction from the code offered:

db.employee.supervisor_id.represent = lambda row: 
get_name(row.supervisor_id)

should be:

db.employee.supervisor_id.represent = lambda val, row: 
get_name(row.supervisor_id)

Thanks again.

-Jim

On Wednesday, November 21, 2012 3:35:39 PM UTC-6, Jim S wrote:
>
> Thanks Anthony.  I will proceed with that route.
>
> -Jim
>
>
> On Wednesday, November 21, 2012 3:04:25 PM UTC-6, Anthony wrote:
>>
>> The problem is that unlike departmentId, supervisorId is a self 
>> reference. With a non-self-reference field, the DAL will automatically set 
>> the "represent" attribute to be the _format attribute of the referenced 
>> table, but that is not possible with a self reference because the 
>> referenced table does not yet exist at the time the field is created. I 
>> think you'll have to set the represent attribute separately in this case.
>>
>> Anthony
>>
>> On Wednesday, November 21, 2012 3:49:15 PM UTC-5, Jim S wrote:
>>>
>>> Yes, I know I can do that, but seems like this should be the default 
>>> behavior for web2py.  I'm just looking for it to work the same way the 
>>> other reference fields work (see the departmentId field in my example).
>>>
>>> -Jim
>>>
>>> On Wednesday, November 21, 2012 1:59:22 PM UTC-6, Cliff Kachinske wrote:
>>>>
>>>> In your controller do something like
>>>> def get_name(id):
>>>>    record = db(db.employees.id==id).select(db.employees.first_name, db.
>>>> employees.last_name).first()
>>>>    return ' %s %s' %(record.first_name, record.last_name)
>>>>
>>>> db.employee.supervisor_id.represent = lambda row: get_name(row.
>>>> supervisor_id)
>>>>
>>>> If it's an index list you will get one database hit per row.  Better to 
>>>> use this trick on the edit or view pages.
>>>>
>>>>
>>>> On Wednesday, November 21, 2012 2:32:54 PM UTC-5, Jim S wrote:
>>>>>
>>>>> I have a table defined as follows:
>>>>>
>>>>> employee = db.define_table('employee',
>>>>>  Field('employeeId', 'id', writable=False, label='Employee #'),
>>>>>  Field('firstName', length=25, required=True, label='First Name',
>>>>>  writable=False),
>>>>>  Field('lastName', length=25, required=True, label='Last Name',
>>>>>  writable=False),
>>>>> ...
>>>>>  Field('departmentId', db.department, label='Department', writable=
>>>>> False),
>>>>>  Field('supervisorId', 'reference employee', label='Supervisor',writable
>>>>> =False),
>>>>>  format='%(lastName)s, %(firstName)s')
>>>>>
>>>>> db.employee.dob.requires = IS_NULL_OR(IS_DATE('%m/%d/%Y'))
>>>>> db.employee.seniorityDate.requires = IS_NULL_OR(IS_DATE('%m/%d/%Y'))
>>>>> db.employee.hireDate.requires = IS_NULL_OR(IS_DATE('%m/%d/%Y'))
>>>>> db.employee.originalHireDate.requires = IS_NULL_OR(IS_DATE('%m/%d/%Y'
>>>>> ))
>>>>> db.employee.terminationDate.requires = IS_NULL_OR(IS_DATE('%m/%d/%Y'))
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> My supervisorId field displays correctly with the dropdown if it is 
>>>>> writable, but when I set writable=False it just displays the value of the 
>>>>> supervisorId field, not the assosiated employee first/last name as the 
>>>>> format would dictate.  departmentId is setup to behave the same way, just 
>>>>> referencing a different table and it displays the proper 'name' of the 
>>>>> department when writable=False instead of the id field like supervisorId 
>>>>> does.  Is this a bug?
>>>>>
>>>>> -Jim
>>>>>
>>>>

-- 



Reply via email to