Works fine , thanks
I saw it was a recurrent question, maybe you should add this in the
book....

On 29 nov, 18:51, mdipierro <[email protected]> wrote:
> my bad
>
> def index():
>     rows = dict((r.id,r) for r in db(db.article).select())
>     for id,row in rows.items(): row.children=[]
>     for id,row in rows.items():
>         if row.f_parent==1: root=row
>         else: rows[row.f_parent].children.append(row)
>     def tree(row):
>         return DIV(H1(row.title),UL(*[LI(tree(child)) for child in
> row.children]))
>     return tree(root)
>
> On Nov 29, 11:06 am, JmiXIII <[email protected]> wrote:
>
> > Hello,
>
> > here is what I did:
> > db.define_table('article',
> >     Field('f_parent','reference article'),
> >     Field('title'))
>
> > ######
> > def index():
> >     rows = dict((r.id,r) for r in db(db.article).select())
> >     for id,row in rows.items(): row.children=[]
> >     for id,row in rows.items():
> >         if row.f_parent==1: root=row
> >         else: rows[row.f_parent].append(row)
> >     def tree(row):
> >         return DIV(H1(row.title),UL(*[LI(tree(child)) for child in
> > row.children]))
> >     return tree(root)
> > ##################
>
> > Here are the articles
> > article.id      article.f_parent        article.title
> > 1       1       Racine
> > 2       1       Branche1
> > 3       1       Branche2
>
> > It gives me the following error :
>
> > Traceback (most recent call last):
> >   File "C:\Documents and Settings\sylvain\Bureau\web2py2\gluon
> > \restricted.py", line 188, in restricted
> >     exec ccode in environment
> >   File "C:/Documents and Settings/sylvain/Bureau/web2py2/applications/
> > test/controllers/default.py", line 66, in <module>
> >   File "C:\Documents and Settings\sylvain\Bureau\web2py2\gluon
> > \globals.py", line 96, in <lambda>
> >     self._caller = lambda f: f()
> >   File "C:/Documents and Settings/sylvain/Bureau/web2py2/applications/
> > test/controllers/default.py", line 60, in index
> >     else: rows[row.f_parent].append(row)
> >   File "C:\Documents and Settings\sylvain\Bureau\web2py2\gluon
> > \sql.py", line 742, in __getattr__
> >     return dict.__getitem__(self,key)
> > KeyError: 'append'
>
> > T tried to modify :
> >         else: rows[row.f_parent].append(row)
> > with
> >         else: rows[row.children].append(row)
> > as it seems we're trying to build a list of children.
> > Yet i get another error : TypeError: list objects are unhashable
>
> > Can anybody help me ?
>
> > On 29 nov, 12:27, JmiXIII <[email protected]> wrote:
>
> > > That's it I'll try it
> > > thanks a lot!
>
> > > On 29 nov, 00:48, mdipierro <[email protected]> wrote:
>
> > > > I assume you are trying to build a hierarchial tree of articles and
> > > > you want them all from the parent.
>
> > > > I would do this something like this:
>
> > > > db.define_table('article',Field('f_parent','reference
> > > > article'),Field('title'))
>
> > > > def index():
> > > >     rows = dict((r.id,r) for r in db(db.article).select())
> > > >     for id,row in rows.items(): row.children=[]
> > > >     for id,row in rows.items():
> > > >         if row.f_parent==0: root=row
> > > >         else: rows[row.f_parent].append(row)
> > > >     def tree(row):
> > > >         return DIV(H1(row.title),UL(*[LI(tree(child)) for child in
> > > > row.children])))
> > > >     return tree(root)
>
> > > > On Nov 28, 5:00 pm, JmiXIII <[email protected]> wrote:
>
> > > > > Hello,
>
> > > > > I'm facing I guess a well known programming problem. It is not really
> > > > > related to web2by, but since I'm using web2py I hope somebody here can
> > > > > help.
>
> > > > > Here is my controller :
>
> > > > > def global_view():
> > > > >     parents = db(~(db.t_article.id==db.t_list.f_article)).select()
> > > > >     tree={}
> > > > >     for parent in parents:
> > > > >         tree[parent.t_article.id]={}
> > > > >         sublevel=db(parent.t_article.id==db.t_list.f_parent).select()
> > > > >         for son in sublevel:
> > > > >             tree[parent.t_article.id][son.f_article]=son.f_article
> > > > >             tree[parent.t_article.id][son.f_article]={}
> > > > >             sublevel2=db(son.f_article==db.t_list.f_parent).select()
> > > > >             for son2 in sublevel2:
> > > > >                 tree[parent.t_article.id][son.f_article]
> > > > > [son2.f_article]=son2.f_article
> > > > >                 
> > > > > tree[parent.t_article.id][son.f_article][son2.f_article]={}
> > > > >     return dict(tree=tree)
>
> > > > > So in fact I'd like to go on for son3, son4, based on the same model
> > > > > as sublevel2... until sublevelx=None.
> > > > > I guess I should use some kind of recursive or loop function.
> > > > > I've read different things using right and left variable for
> > > > > hierarchical tree, but it seems to me that it is possible to build a
> > > > > loop in my controller without modifying my model.
>
> > > > > Hope I do not disturb this groupes with this kind of question.
>
>

Reply via email to