2010-04-23 25 views
5

Estoy buscando una buena manera de almacenar y utilizar datos jerárquicos (padre/hijo) en Django. He estado usando django-mptt, pero parece totalmente incompatible con mi cerebro: termino con errores no obvios en lugares no obvios, sobre todo cuando estoy moviendo cosas en el árbol: termino con un estado inconsistente, donde un nodo y su padre no estará de acuerdo con su relación.Almacenar datos jerárquicos (padre/hijo) en Python/Django: ¿alternativa MPTT?

Mis necesidades son simples:

  • Dado un nodo:
    • encontrar su raíz
    • encontrar sus antepasados ​​
    • encontrar sus descendientes
  • Con un árbol:
    • mueve fácilmente los nodos (es decir. el cambio de los padres)

Mis árboles será más bien pequeñas (como máximo 10 k nodos más de 20 niveles, en general, mucho más pequeña, por ejemplo, 10 nodos con 1 ó 2 niveles).

Tengo que pensar que tiene que haber una manera más fácil de hacer árboles en python/django. ¿Hay otros enfoques que hacen un mejor trabajo para mantener la consistencia?

+2

django-MPTT es grande - que acaba de leer algunos de respuesta de Daniel Roseman aquí (http://stackoverflow.com/questions/2324727/re-ordering-child-nodes- in-django-mptt/2326625 # 2326625) para obtener ayuda con el movimiento de nodos. No te rindas! –

+0

Gracias, parece que es la causa probable de mis problemas también, pero no confío en mí mismo para hacerlo bien cada vez, parece demasiado fácil de extrañar. Me haré eco de tu comentario: "Todavía estoy un poco nervioso sobre MPTT y la posibilidad de que el árbol se ponga en mal estado" :-) Supongo que terminaste contento. – Parand

Respuesta

3

django-treebeard es otra opción. Tiene una gran documentación. Creo que cumple con todos los requisitos anteriores e incluye algunas funciones para verificar si hay problemas en el árbol y solucionar esos problemas en el árbol.

Node.find_problems()https://tabo.pe/projects/django-treebeard/docs/1.60/api.html#treebeard.models.Node.find_problems

Node.fix_tree()https://tabo.pe/projects/django-treebeard/docs/1.60/api.html#treebeard.models.Node.fix_tree

+1

Por lo que vale, terminé quedándome con mptt y resolviendo los problemas, aunque no estoy particularmente contento con eso. treebeard parece una buena alternativa, así que estoy aceptando la respuesta. – Parand

Cuestiones relacionadas