2010-04-23 80 views
5

Szukam dobry sposób przechowywania i używania danych hierarchicznych (nadrzędny/podrzędny) w Django. Używałem django-mptt, ale wydaje mi się, że jest to całkowicie niezgodne z moim mózgiem - kończę na nieoczywistych błędach w nieoczywistych miejscach, głównie podczas przenoszenia rzeczy w drzewie: kończę w niespójnym stanie, gdzie węzeł i jego rodzic nie będzie się zgadzał co do ich związku.Przechowywanie danych hierarchicznych (macierzystych/potomnych) w Pythonie/Django: Alternatywa MPTT?

Moje potrzeby są proste:

  • Biorąc węzeł:
    • znaleźć jego korzeń
    • znaleźć jego przodkowie
    • znaleźć jego potomkowie
  • z drzewa:
    • łatwo przenosić węzły (np. Zmiana rodzic)

Kim drzewa będzie Niewielkie (najwyżej 10k węzły na poziomy 20, na ogół o wiele mniejszy, powiedzmy 10 węzły 1 lub 2 poziomy).

Muszę myśleć, że musi istnieć łatwiejszy sposób robienia drzew w python/django. Czy istnieją inne podejścia, które lepiej radzą sobie z utrzymaniem spójności?

+2

django-mptt jest świetny - wystarczy przeczytać kilka odpowiedzi Daniel Roseman tu (http://stackoverflow.com/questions/2324727/re-ordering-child-nodes- in-django-mptt/2326625 # 2326625) w celu uzyskania pomocy przy przenoszeniu węzłów. Nie poddawaj się! –

+0

Dzięki, że wygląda to na prawdopodobną przyczynę moich problemów, ale nie ufam sobie, że za każdym razem otrzymam to prawo - wydaje się zbyt łatwe do przeoczenia. Powtórzę twój komentarz: "Wciąż trochę zdenerwowany przez MPTT i możliwość, że drzewo dostanie się w zły stan" :-) Rozumiem, że skończyło się to szczęśliwym? – Parand

Odpowiedz

3

django-treebeard to kolejna opcja. Ma świetną dokumentację. Uważam, że spełnia on wszystkie powyższe wymagania i zawiera pewne funkcje sprawdzania drzewa pod kątem problemów i naprawiania tych problemów w drzewie.

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

Za to, co jest warte, w końcu trzymałem się mptta i pracowałem nad problemami, chociaż nie jestem szczególnie zadowolony z tego. Drzewiec wygląda na dobrą alternatywę, więc akceptuję odpowiedź. – Parand