Have you tried adding a format to your tables and defining your tables using objects instead of 'reference...'?
I'm no web2py expert by any means, but I had a similar situation and when I changed the reference for my foreign id to db.other_table instead of 'reference other_table,' the format defined for that table was used instead of the id. Something like this: db.define_table('HumanLanguage', Field('languageName','string'), Field('forumLocations','string'), Field('comments','string'), format = '%(languageName)s'), # define a format auth.signature) db.HumanLanguage.languageName.requires = IS_NOT_EMPTY() ## ## Define DictionaryReferenceModel and WordReferenceModel above here ## DictionaryReferenceModel, WordReferenceModel should have a format ## ## Dictionary type means what category of dictionary is it? Medical, computer,etc. There is one for each language. db.define_table('DictionaryType', Field('dictionaryName','string'), Field('comments','string'), Field('languageID',db.HumanLanguage ), # changed to object Field('DictionaryReferenceModelID', db.DictionaryReferenceModel), # changed to object format = '%(dictionaryName)s', # define format auth.signature) db.DictionaryType.dictionaryName.requires = IS_NOT_EMPTY() db.DictionaryType.languageID.requires = IS_IN_DB(db, 'HumanLanguage.id', '%(languageName)s',zero=T('choose one')) db.DictionaryType.DictionaryReferenceModelID.requires = IS_IN_DB(db, 'DictionaryReferenceModel.id', '%(DictionaryTypeID)s',zero=T('choose one')) db.define_table('Word', Field('wordName','string'), Field ('definition','string'), Field('languageID', db.HumanLanguage ), # changed to object Field('dictionaryTypeID',db.DictionaryType), # changed to object Field('wordReferenceModelID',db.WordReferenceModel), # changed to object Field('comments','string'), auth.signature) db.Word.languageID.requires = IS_IN_DB(db, 'HumanLanguage.id', '%(languageName)s',zero=T('choose one')) db.Word.dictionaryTypeID.requires = IS_IN_DB(db, 'DictionaryType.id', '%(dictionaryName)s',zero=T('choose one')) db.Word.wordName.requires = IS_NOT_EMPTY() db.Word.wordReferenceModelID.requires = IS_NULL_OR(IS_IN_DB(db, 'WordReferenceModel.id', '%(wordID)s',zero=T('choose one'))) On Friday, February 22, 2013 2:48:19 PM UTC-6, Alex Glaros wrote: > > thanks for offering to take a look. > > Screen shots here: > https://docs.google.com/document/d/1e517YRN8FK08vqsVWmp1UuZ0LLevCNlkrhWyCkBQ7uQ/edit?usp=sharing > > Alex > > On Friday, February 22, 2013 12:16:39 PM UTC-8, Jim S wrote: >> >> Sorry, I'm kinda lost in what you're trying to do. Can you show it in >> code or screen shots? >> >> -Jim >> >> >> On Fri, Feb 22, 2013 at 12:08 PM, Alex Glaros <alexg...@gmail.com> wrote: >> >>> There is a grandparent (HumanLanguage), parent (DictionaryType), child >>> (Word), relationship. If I go straight from the grandparent to the child, >>> "represent" works. >>> (First I click on HumanLangages, then I click on Word) >>> >>> If I go from the parent to the child, I get this message: <type >>> 'exceptions.TypeError'> <lambda>() takes exactly 2 arguments (1 given) >>> (First I click on HumanLangages, then I click on DictionaryType, then, I >>> click on Word) >>> >>> If I reduce the number of parms to db.Word.dictionaryTypeID.represent = >>> lambda id: db.DictionaryType(id).dictionaryName, then it works if I go from >>> the parent to the child, but if I go from the grandparent to the child, I >>> get <type 'exceptions.TypeError'> <lambda>() takes exactly 1 argument (2 >>> given). >>> >>> If a join was allowed, it would solve the problem but I think they are >>> not supported in smartgrid. >>> >>> Any ideas would be much appreciated, >>> >>> Thanks, >>> >>> Alex >>> >>> >>> On Friday, February 22, 2013 5:24:48 AM UTC-8, Jim S wrote: >>> >>>> Depends on whether or not you want that behavior globally or not. >>>> Remember, your model gets executed on every request. So, if you want >>>> that >>>> behavior globally I'd put it there. If you just need it for one instance, >>>> put it in the controller. >>>> >>>> -Jim >>>> >>>> >>>> On Fri, Feb 22, 2013 at 12:20 AM, Alex Glaros <alexg...@gmail.com>wrote: >>>> >>>>> It worked Jim >>>>> >>>>> thanks so much for going through the process of writing and testing >>>>> the code. >>>>> >>>>> I'm new to web2py, is there any preference as to where that statement >>>>> goes: controller or model? >>>>> >>>>> much appreciated, >>>>> >>>>> Alex >>>>> >>>>> >>>>> On Thu, Feb 21, 2013 at 8:31 PM, Jim S <j...@qlf.com> wrote: >>>>> >>>>>> Add this line before creating your smartgrid: >>>>>> >>>>>> db.Word.dictionaryTypeID.**represent = lambda s,r: s.dictionaryName >>>>>> >>>>>> Does that help? It worked for the trimmed down model I made... >>>>>> >>>>>> -Jim >>>>>> >>>>>> >>>>>> On Thursday, February 21, 2013 9:16:39 PM UTC-6, Alex Glaros wrote: >>>>>>> >>>>>>> db.define_table('**HumanLanguage',Field('** >>>>>>> languageName','string'),Field(**'forumLocations','string'),**Field('comments','string'), >>>>>>> >>>>>>> auth.signature) >>>>>>> db.HumanLanguage.languageName.**requires = IS_NOT_EMPTY() >>>>>>> >>>>>>> db.define_table('Word',Field('**wordName','string'), Field >>>>>>> ('definition', 'string'), Field('languageID','reference >>>>>>> HumanLanguage'),Field('**dictionaryTypeID','reference >>>>>>> DictionaryType'),Field('**wordReferenceModelID','**reference >>>>>>> WordReferenceModel'), Field('comments','string'), auth.signature) >>>>>>> db.Word.languageID.requires = IS_IN_DB(db, 'HumanLanguage.id', >>>>>>> '%(languageName)s',zero=T('**choose one')) >>>>>>> db.Word.dictionaryTypeID.**requires = IS_IN_DB(db, >>>>>>> 'DictionaryType.id', '%(dictionaryName)s',zero=T('**choose one')) >>>>>>> db.Word.wordName.requires = IS_NOT_EMPTY() >>>>>>> db.Word.wordReferenceModelID.**requires = IS_NULL_OR(IS_IN_DB(db, >>>>>>> 'WordReferenceModel.id', '%(wordID)s',zero=T('choose one'))) >>>>>>> >>>>>>> ## Uses English language as standard connector between all >>>>>>> languages. WordID below points to the English version of the word that >>>>>>> is >>>>>>> the standard. The reason "Is_Null" clause is there is because the first >>>>>>> time the word is encountered, it won't be in the English dictionary >>>>>>> db.define_table('**WordReferenceModel',Field('**wordID','reference >>>>>>> Word'),Field('**dictionaryTypeID','reference DictionaryType'), >>>>>>> Field('picture', 'upload', default=''),Field('comments','**string'), >>>>>>> auth.signature) >>>>>>> db.WordReferenceModel.wordID.**requires = IS_NOT_EMPTY() >>>>>>> db.WordReferenceModel.wordID.**requires = IS_IN_DB(db, 'Word.id', >>>>>>> '%(wordName)s',zero=T('choose one')) >>>>>>> db.WordReferenceModel.**dictionaryTypeID.requires = IS_IN_DB(db, >>>>>>> 'DictionaryType.id', '%(dictionaryName)s',zero=T('**choose one')) >>>>>>> ## dictionary_type_query = (db.DictionaryType.** >>>>>>> dictionaryName=='English') >>>>>>> ## /* need this too for wordReferenceModel */ >>>>>>> >>>>>>> ## Dictionary type means what category of dictionary is it? Medical, >>>>>>> computer,etc. There is one for each language. >>>>>>> db.define_table('**DictionaryType',Field('** >>>>>>> dictionaryName','string'),**Field('comments','string'), >>>>>>> Field('languageID','reference HumanLanguage'), >>>>>>> Field('**DictionaryReferenceModelID', 'reference >>>>>>> DictionaryReferenceModel'), auth.signature) >>>>>>> db.DictionaryType.**dictionaryName.requires = IS_NOT_EMPTY() >>>>>>> db.DictionaryType.languageID.**requires = IS_IN_DB(db, >>>>>>> 'HumanLanguage.id', '%(languageName)s',zero=T('**choose one')) >>>>>>> db.DictionaryType.**DictionaryReferenceModelID.**requires = >>>>>>> IS_IN_DB(db, 'DictionaryReferenceModel.id', >>>>>>> '%(DictionaryTypeID)s',zero=T( >>>>>>> **'choose one')) >>>>>>> >>>>>>> ## Uses English dictionary type as standard connector between all >>>>>>> dictionary types. DictionaryType.id points to the English >>>>>>> DictionaryType.id >>>>>>> db.define_table('**DictionaryReferenceModel', >>>>>>> Field('DictionaryTypeID','**reference DictionaryType'),Field('** >>>>>>> comments','string'), >>>>>>> auth.signature) >>>>>>> db.DictionaryReferenceModel.**DictionaryTypeID.requires = >>>>>>> IS_NOT_EMPTY() >>>>>>> >>>>>>> db.define_table('Synonyms',**Field('synonymName','string'),**Field('wordID','reference >>>>>>> >>>>>>> Word'),Field('comments','**string'), >>>>>>> auth.signature) >>>>>>> db.Synonyms.synonymName.**requires = IS_NOT_EMPTY() >>>>>>> db.Synonyms.wordID.requires = IS_NOT_EMPTY() >>>>>>> db.Synonyms.wordID.requires = IS_IN_DB(db, 'Word.id', >>>>>>> '%(Word)s',zero=T('choose one')) >>>>>>> >>>>>>> db.define_table('**PublicComments',Field('wordID'**,'reference >>>>>>> Word'),Field('comments','**string'), >>>>>>> auth.signature) >>>>>>> db.PublicComments.comments.**requires = IS_NOT_EMPTY() >>>>>>> db.PublicComments.wordID.**requires = IS_NOT_EMPTY() >>>>>>> db.PublicComments.wordID.**requires = IS_IN_DB(db, 'Word.id', >>>>>>> '%(wordName)s',zero=T('choose one')) >>>>>>> >>>>>>> >>>>>>> On Thursday, February 21, 2013 6:10:56 PM UTC-8, Jim S wrote: >>>>>>>> >>>>>>>> Can you show the model code? >>>>>>>> >>>>>>>> -Jim >>>>>>>> >>>>>>>> On Thursday, February 21, 2013 7:35:52 PM UTC-6, Alex Glaros wrote: >>>>>>>>> >>>>>>>>> Instead of *db.Word.dictionaryTypeID* displaying (which is a >>>>>>>>> foreign key in db.Word), I’d like a value from the foreign table to >>>>>>>>> appear, >>>>>>>>> i.e., DictionaryType. dictionaryName. >>>>>>>>> >>>>>>>>> >>>>>>>>> In the example below, when user cascades down to the Word table, >>>>>>>>> it only shows db.Word.dictionaryTypeID but I’d like to add the >>>>>>>>> corresponding DictionaryType. dictionaryName value to it. >>>>>>>>> >>>>>>>>> >>>>>>>>> def search_lang(): >>>>>>>>> >>>>>>>>> grid = SQLFORM.smartgrid(db.**HumanLanguage, >>>>>>>>> linked_tables=['Word','**DictionaryType'], fields = [ >>>>>>>>> db.HumanLanguage.id, db.HumanLanguage.languageName, db.Word.id, >>>>>>>>> db.Word.wordName, db.Word.definition, db.DictionaryType.** >>>>>>>>> dictionaryName, >>>>>>>>> >>>>>>>>> *db.Word.dictionaryTypeID*], >>>>>>>>> >>>>>>>>> user_signature=False) >>>>>>>>> >>>>>>>>> return dict(grid=grid) >>>>>>>>> >>>>>>>>> >>>>>>>>> id<http://127.0.0.1:8000/tech_dictionary/default/search_lang/HumanLanguage/Word.languageID/1?keywords=&order=Word.id> >>>>>>>>> >>>>>>>>> >>>>>>>>> Wordname<http://127.0.0.1:8000/tech_dictionary/default/search_lang/HumanLanguage/Word.languageID/1?keywords=&order=Word.wordName> >>>>>>>>> >>>>>>>>> >>>>>>>>> Definition<http://127.0.0.1:8000/tech_dictionary/default/search_lang/HumanLanguage/Word.languageID/1?keywords=&order=Word.definition> >>>>>>>>> >>>>>>>>> >>>>>>>>> Dictionarytypeid<http://127.0.0.1:8000/tech_dictionary/default/search_lang/HumanLanguage/Word.languageID/1?keywords=&order=Word.dictionaryTypeID> >>>>>>>>> >>>>>>>>> 1 beaker glass jar 1 >>>>>>>>> >>>>>>>>> >>>>>>>>> Want to replace the "1" under Dictionarytypeid with value from >>>>>>>>> foreign table. >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> Alex Glaros >>>>>>>>> >>>>>>>> -- >>>>>> >>>>>> --- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "web2py-users" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to web2py+un...@**googlegroups.com. >>>>>> >>>>>> For more options, visit >>>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>>>> . >>>>>> >>>>>> >>>>>> >>>>> >>>>> -- >>>>> >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "web2py-users" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to web2py+un...@**googlegroups.com. >>>>> >>>>> For more options, visit >>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>>> . >>>>> >>>>> >>>>> >>>> >>>> -- >>> >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "web2py-users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to web2py+un...@googlegroups.com. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.