The key error was because it was '%(name)' not '%(name)s'.  Everything 
works now! Thanks!

On Friday, July 20, 2012 3:37:11 PM UTC-5, Anthony wrote:
>
> Actually, I would think that would have caused an AttributeError (trying 
> to access an attribute of a NoneType object). Not sure where the KeyError 
> is arising.
>
> Anthony
>
> On Friday, July 20, 2012 4:31:52 PM UTC-4, Anthony wrote:
>>
>> Oh, right, since you allow empty values, you'll need to test for that 
>> before doing the query:
>>
>> represent=lambda id, row: db.person(id).name if id else 'Nobody owns 
>> this dog'
>>
>> Anthony
>>
>> On Friday, July 20, 2012 3:47:33 PM UTC-4, joe wrote:
>>>
>>> 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