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