Ok figured out I needed to change that to "as_trees". However the database suggestion you gave is causing a
"IntegrityError: FOREIGN KEY constraint failed" error immediately upon trying to put any data into any field. For example if I put Animals in the title and leave the other field "parent_id" blank it gives me the error. If I put a number in parent_id with the title an error, and if I just put a number in the parent_id field also an error. Any ideas? Thanks On Tuesday, January 21, 2014 9:45:27 AM UTC-6, Massimo Di Pierro wrote: > > First of all notice that if you use web2py2.8.2 you can do this: > > db.define_table('store_catalog', > Field('title'), > Field('slug',requires=IS_SLUG(),compute=lambda row: > IS_SLUG.urlify(row.title)), > Field('parent_id','reference store_catalog')) > > def menu_rec(items): return > [(x.title,None,URL('action',args=x.slug),menu_rec(x.children)) for x in > items or []] > response.menu = menu_rec(db(db.store_catalog).select().as_tree()) > > And you get a recursive menu with arbitrary depth and a web interface to > edit it with slugs. > > On Tuesday, 21 January 2014 00:11:59 UTC-6, James Burke wrote: >> >> Hi, >> >> I managed to get one working a little while ago doing this. This has been >> adapted for your situation, may require some tweaking: >> >> _tables.py - model >> db.define_table('store_catelog') >> >> >> db.define_table('store_catelog', >> Field('title', 'string'), >> Field('description', 'text'), >> Field('parent_catelog', 'reference store_catelog', default=None), >> format='%(title)s', >> redefine=True) >> >> menu.py - model >> response.menu = [] >> >> categories = db(db.store_catelog.parent == None).select(orderby=db. >> store_catelog.id) >> >> for category in categories: >> response.menu+=[ (T(category.title), True if active_page == str( >> category.title.lower()) else False, URL('default','page/%s' % (category. >> title.lower())), [ >> (T(i.title), True if active_page == str(i.id) else False, URL( >> 'default','page/%s' % (i.id)), []) for i in db((db.stored_category.parent >> == category.id)).select(db.store_category.ALL) if i.parent == category.id >> ]) ] >> >> The query returns any categories without a parent and adds them to the >> menu. While doing so looks for any subcategories using the category as a >> parent. >> >> Hope that helps you out. >> >> -James >> >> On Tuesday, January 21, 2014 9:33:50 AM UTC+13, americ...@gmail.comwrote: >>> >>> >>> Hi all, >>> >>> I have been trying for a little over 2 weeks to figure this out... >>> >>> I'm trying to generate a menu that drops down, I have been able to >>> statically create it by overwriting sample app that has the same drop down >>> menu like the web2py.com site. >>> >>> I have this in my db.py: >>> db.define_table('store_catalog', >>> Field('maincategory', 'string'), >>> Field('subcategory', 'string'), >>> Field('description', 'text')) >>> >>> >>> in my menu.py I have gotten this so far: >>> response.menu=[] >>> response.menu.append([T('Catalog'), False, '', >>> [(T('%s' % menucatchoice['maincategory']), False, 'link', >>> [(T('%s' % menucatchoice['subcategory']), False, >>> 'link'),]) for menucatchoice in rows ] ]) >>> >>> It gets me a drop down menu except that for each subcategory it repeats >>> adding it to the main category. Let's say there is only 1 main category and >>> 2 subs that go after that >>> Catalog (this just shows with the caret next to it as intended) >>> MainCategory >>> Sub >>> Sub >>> What I have does put the "Catalog" for the first but, what I get is: >>> MainCategory >>> (blank) >>> MainCategory(don't want this it's being repeated) >>> Subcategory >>> MainCategory(and this one is also a repeat) >>> Subcategory >>> >>> I have tried to break out the response.menu with so many different >>> .appends it's not funny. I have also tried adding the "[-1]". This was >>> the closest I have gotten to what I want it to look like. I'm at an >>> absolute loss on this, any and all help would be greatly appreciated. >>> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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.