Can you paste the table definition that choked on you? -Jim
On Sat, Feb 23, 2013 at 1:34 PM, Alex Glaros <alexgla...@gmail.com> wrote: > 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 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+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.