hi all,

Base upon Julio's mptt-0.9 which handles nested contents:

http://code.djangoproject.com/wiki/ModifiedPreorderTreeTraversal

I made this more "generic" version mptt-0.95, from the README:

[snip]
orignal mptt readme
[/snip]

Follow up by me

===============



First of all, ***BIG Thanks*** to `Gijs Van Tulder's excellent
article`_ on the MPTT subject &

Julio's GREAT work on this django implementation!



mptt-0.95 (following django's svn version number:) based on Julio's
code, and make it even more

"generic":



 - Julio's version treats the root content (for example, an Article
object which is going to be

 commented/follow-up'd) & the tree of the root content differently),
so the Node model is in

 response for both "describing a tree" & "storing node content".



 - In this modified version, I "limit" the Node model's responsibility
to only "describing a

 tree": you keep storing your model's data in a "flat" way, once
necessary, you can organize

 them into a "tree", and, ***you can organize this tree across all of
the models of your site***,

 that means, you can build your tree with User, Article, Group,
WhatEver model's object instances

 as the tree's node:)



While comparing the code between Julio's original version and my
modified version, please note:



Both versions are using the GenericForeignKey_ like technique, and
both have content_type &

object_id fields, however, they are different:



 - Julio's version uses these fields to refer to the ***root content
object of the Node tree***;

 - This modified version uses them to refer to ***content object that
becomes a nodes of the tree***



Please check the code for detail:)



Sample code

-----------



    from path.to.your.models import Article

    from agv.apps.mptt.models import Node



    a1 = Article.objects.get(pk=1)

    a2 = Article.objects.get(pk=2)

    a3 = Article.objects.get(pk=3)

    a4 = Article.objects.get(pk=4)

    a5 = Article.objects.get(pk=5)



    n1 = Node(content_object=a1) # the root node

    n1.save()



    # 2nd level nodes

    n2 = Node(content_object=a2, parent=a1)

    n2.save()



    n3 = Node(content_object=a3, parent=a1)

    n3.save()



    # 3rd level nodes

    n4 = Node(content_object=a4, parent=a2)

    n4.save()



    n5 = Node(content_object=a5, parent=a3)

    n5.save()



    # you can even do this

    from path.to.your.other.models import Banana



    b = Banana.objects.get(pk=1)



    # add the banana to the tree of articles! :-p

    n6 = Node(content_object=b, parent=a1)

    n6.save()





Thanks again to Julio's code!



Please help me to test it if you're interested:)



Sorry for my poor English! With any problem, find me at:



Eric Hsu

[EMAIL PROTECTED]



.. _Gijs Van Tulder's excellent article:
http://www.sitepoint.com/print/hierarchical-data-database

.. _GenericForeignKey:
http://feh.holsman.net/articles/2006/06/19/django-generic-relations

-- 
- http://www.ifaxian.com
- http://groups.google.com/group/nkeric-daily
- http://nkeric.3322.org


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users
-~----------~----~----~----~------~----~------~--~---

Attachment: mptt-0.95.tar.bz2
Description: BZip2 compressed data

Reply via email to