I've added another represent HumanLanguage "name" to represent HumanLanguage "ID" in the Word table, and it works correctly. Same table, same everything, so I will see if there's any differences in what I'm doing.
Alex On Friday, February 22, 2013 10:08:04 AM UTC-8, Alex Glaros 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 (result of a query) 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. >>>> >>>> >>>> >>> >>> -- >>> >>> --- >>> 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.