2010-04-23 5 views
5

Je cherche un bon moyen de stocker et d'utiliser des données hiérarchiques (parent/enfant) dans Django. J'ai utilisé django-mptt, mais cela semble totalement incompatible avec mon cerveau - je me retrouve avec des bugs non évidents dans des endroits non évidents, surtout quand je déplace des choses dans l'arbre: je me retrouve avec un état incohérent, où un nœud et son parent sera en désaccord sur leur relation.Stocker des données hiérarchiques (parent/enfant) dans Python/Django: alternative MPTT?

Mes besoins sont simples:

  • Étant donné un nœud:
    • trouver sa racine
    • trouver ses ancêtres
    • trouver ses descendants
  • Avec un arbre:
    • déplacer facilement les nœuds (ie. Changement de parent)

Mes arbres seront assez petites (au plus 20 noeuds 10k sur les niveaux, généralement beaucoup plus petits, disons 10 nœuds avec 1 ou 2 niveaux).

Je dois penser qu'il doit y avoir un moyen plus simple de faire des arbres dans python/django. Existe-t-il d'autres approches qui permettent de mieux maintenir la cohérence?

+2

django-MPTT est grand - lu quelques-unes de la réponse de Daniel Roseman ici (http://stackoverflow.com/questions/2324727/re-ordering-child-nodes- in-django-mptt/2326625 # 2326625) pour de l'aide avec le déplacement des nœuds. N'abandonne pas! –

+0

Merci, cela ressemble à la cause probable de mes problèmes, mais je ne me fais pas confiance pour obtenir ce droit à chaque fois - semble trop facile à manquer. Je vais faire écho à votre commentaire: "Encore un peu nerveux à propos de MPTT et la possibilité de l'arbre entrer dans un mauvais état" :-) Je suppose que vous avez fini heureux? – Parand

Répondre

3

django-treebeard est une autre option. Il a une excellente documentation. Je crois qu'il répond à toutes vos exigences ci-dessus et comprend certaines fonctions pour vérifier l'arbre pour les problèmes et la résolution de ces problèmes dans l'arbre.

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

Pour ce que ça vaut, j'ai fini par rester avec mptt et à résoudre les problèmes, même si je ne suis pas particulièrement heureux à ce sujet. treebeard ressemble à une bonne alternative donc j'accepte la réponse. – Parand

Questions connexes