a, sorry, my fault, didn't notice that the id field is none. thanks for show me my own mistake. is there a way to arrange the result for that? e.g. expected result : root - child 1 - child 2
thanks and best regards, stifan p.s. i've change the code into : *models/db_wizard.py* # coding: utf8 from gluon.dal import Table class TreeProxy(object): skeleton = Table(None, 'tree', Field('ileft', 'integer'), Field('iright', 'integer')) def __init__(self, table): self.table = table def ancestors(self, node): db = self.table._db return db(self.table.ileft <= node.ileft)(self.table.iright > node.iright) def descendants(self, node): db = self.table._db return db(self.table.ileft >= node.ileft)(self.table.iright < node.iright) def add_leaf(self, parent_id = None, **fields): if not parent_id: nrecords = self.table._db(self.table).count() fields.update(dict(ileft = nrecords, iright = nrecords)) else: node = self.table(parent_id) fields.update(dict(ileft = node.iright, iright = node.iright)) node.update_record(iright = node.iright + 1) ancestors = self.ancestors(node).select() for ancestor in ancestors: ancestor.update_record(iright = ancestor.iright + 1) ancestors = self.ancestors(node).select() for ancestor in ancestors: ancestor.update_record(iright = ancestor.iright + 1) return self.table.insert(**fields) def del_node(self, node): delta = node.iright - node.ileft deleted = self.descendants(node).delete() db = self.table._db db(self.table.iright > node.iright).update(iright = self.table.iright - delta) del self.table[node.id] return deleted + 1 treeproxy = TreeProxy(db.define_table('mytree', Field('name'), TreeProxy.skeleton)) if db(db.mytree).isempty(): id = treeproxy.add_leaf(name = "root") treeproxy.add_leaf(parent_id = id, name = "child1") treeproxy.add_leaf(parent_id = id, name = "child2") *controllers/default.py* def test(): all_rows = db(db.mytree.id > 0).select() return dict(all_rows = all_rows) *views/default/test.html* {{extend 'layout.html'}} {{for all_row in all_rows:}} {{for node_ancestor in treeproxy.ancestors(db.mytree(all_row.id)).select():}} {{=DIV('ID : ', all_row.id)}} {{=BR()}} {{=DIV('Ancestor : ', node_ancestor.name)}} {{=BR()}} {{pass}} {{for node_descendant in treeproxy.descendants(db.mytree(all_row.id)).select():}} {{=DIV('ID : ', all_row.id)}} {{=BR()}} {{=DIV('Descendant : ', node_descendant.name)}} {{=BR()}} {{pass}} {{pass}} -- 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.