web2py doesn't seem to accept that format on my windows version. I get <type 'exceptions.AttributeError'> 'DAL' object has no attribute 'DictionaryType' The error below doesn't come up when there is no data:
*<type 'exceptions.TypeError'> <lambda>() takes exactly 2 arguments (1 given)* The represent attribute works if there are two files in play instead of three I created a simplified version and changed every field name in case there was some reserved word problem but it didn't work What I will do is write something similar from scratch with different table and field names. Thanks, Alex On Sat, Feb 23, 2013 at 8:35 AM, Jim S <j...@qlf.com> wrote: > Just to be clear, he isn't asking just to remove quotes, but to specify > your reference columns as: > > db.table_name > > instead of > > 'reference table_name' > > -Jim > > On Friday, February 22, 2013 7:14:18 PM UTC-6, Alex Glaros wrote: > >> thanks for giving it a shot but depending upon whether I use quotes or >> not, either the data column disappears from the web page or I get errors >> >> On Fri, Feb 22, 2013 at 1:47 PM, Kyle Flanagan <kylefl...@gmail.com>wrote: >> >>> 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. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> >>>>>>>> --- >>>>>>>> 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 a topic in the >>> Google Groups "web2py-users" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/web2py/va56WuVvbqI/unsubscribe?hl=en. >>> To unsubscribe from this group and all its topics, 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. > > > -- --- 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.