That hasn't worked for me.  When I try, I get the error:<type 
'exceptions.KeyError'> 'name'

It points to the smartgrid I made, with this code:  grid = 
SQLFORM<http://127.0.0.1:8000/examples/global/vars/SQLFORM>
.smartgrid(db.dog)

Thanks!
-Joe Peacock


On Tuesday, July 17, 2012 6:22:53 PM UTC-5, Anthony wrote:
>
> You should probably make it a reference field. By default, if you don't 
> specify any "requires", you'll automatically get an IS_IN_DB validator as 
> well as a "represent" attribute that displays whatever is specifying by the 
> "format" attribute of the referenced table. However, if you specify your 
> own validator(s), then you don't get any default "represent" -- so just add 
> your own explicit represent:
>
> db.define_table('dog',
>     Field <http://127.0.0.1:8000/examples/global/vars/Field>('name'), 
>     Field <http://127.0.0.1:8000/examples/global/vars/Field>('owner', db.
> person, 
> requires=IS_EMPTY_OR<http://127.0.0.1:8000/examples/global/vars/IS_EMPTY_OR>
> (IS_IN_DB <http://127.0.0.1:8000/examples/global/vars/IS_IN_DB>(db, '
> person.id', '%(name)')),
>           represent=lambda id, row: db.person(id).name),
>     format = '%(name)s')
>
> Anthony
>
> On Tuesday, July 17, 2012 10:26:52 AM UTC-4, joe wrote:
>>
>> Is there any way to make a field in a form referencing a foreign key 
>> null, while storing a foreign key as a foreign key, but making dropdowns 
>> corrospond to the format.  Here is my example:
>>
>> Model:
>>
>> db = DAL 
>> <http://127.0.0.1:8000/examples/global/vars/DAL>('sqlite://storage.sqlite')
>>
>> db.define_table('person',
>>     Field <http://127.0.0.1:8000/examples/global/vars/Field>('name'),
>>     Field <http://127.0.0.1:8000/examples/global/vars/Field>('email'),
>>     format = '%(name)s')
>>     
>> db.define_table('dog',
>>     Field <http://127.0.0.1:8000/examples/global/vars/Field>('name'), 
>>     Field <http://127.0.0.1:8000/examples/global/vars/Field>('owner', 
>> requires = IS_EMPTY_OR 
>> <http://127.0.0.1:8000/examples/global/vars/IS_EMPTY_OR>(IS_IN_DB 
>> <http://127.0.0.1:8000/examples/global/vars/IS_IN_DB>(db,db.person))), #I 
>> have also tried default=None, and required = False, no difference
>>     format = '%(name)s')
>>
>>
>> Controller:
>>
>> *from gluon.tools import Crud
>> crud = Crud(db)
>>
>> def index():
>>     form = SQLFORM(db.person)
>>     if form.process().accepted:
>>         response.flash = 'success'
>>     return dict(form=form)
>>     
>> def add_dog():    
>>     form = SQLFORM(db.dog)
>>     if form.process().accepted:
>>         response.flash = 'success'
>>     return dict(form=form)
>>
>> def view():
>>     grid = SQLFORM.smartgrid(db.dog)
>>     grid2 = crud.select(db.person)
>>     return dict(grid=grid, grid2=grid2)
>> *
>>
>> *
>> *
>>
>> When I have the above code, a foreign key will be stored in the database, 
>> but all views of that key will be rendered as the numerical value of the 
>> foreign key, and not the name.  In the table definition, if I just have 
>> *db.person* instead of requires = *IS_EMPTY_OR*(*IS_IN_DB*(db,db.person)), 
>> It requires the field.  
>>
>>
>> Are there any workarounds?
>>
>> -Joe Peacock
>>
>>

-- 



Reply via email to