I think in
for node in treeproxy.ancestors(db.mytree(id)).select():
print node.name
or
for node in treeproxy.descendants(db.mytree(id)).select():
print node.name
db.mytree(id) is None.
On Sunday, 10 November 2013 17:41:11 UTC-6, 黄祥 wrote:
>
> i found on internet something like :
> models/db.py
> 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")
>
> for node in treeproxy.ancestors(db.mytree(id)).select():
> print node.name
> for node in treeproxy.descendants(db.mytree(id)).select():
> print node.name
>
> treeproxy.del_node(db.mytree(id))
>
> but it return an error :
>
> AttributeError: 'NoneType' object has no attribute 'iright'
>
>
> how should i use it on?
>
> ref:
>
> http://www.packtpub.com/sites/default/files/5467OS-Chapter-3-Database-Abstraction-Layer.pdf
>
> thanks and best regards,
> stifan
>
--
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.