2011-01-20 92 views
2

我使用Django具有以下(簡化)型號:Django的 - 管理樹形結構

class Entity(models.Model): 
    name = models.CharField(max_length=30) 

class Person(models.Model): 
    last_name = models.CharField(max_length=30) 
    first_name = models.CharField(max_length=30) 
    entity = models.ForeignKey(Entity) 

我想層次功能添加到實體模型(以及由此延伸,對個人)。

問題:考慮到我喜歡系統穩定性和易於維護,而不是尖叫快速的查詢速度(儘管跨越2000葉和節點實體的查詢速度不可接受會很糟糕),您推薦哪種實現。

1)將層次結構樹作爲SQL數據庫中的嵌套集實現,以便通過正常的現場操作進行訪問;或

2)在Django之外以普通Python樹(例如Node類)的形式實現層次結構樹,通過Django模型方法訪問層次結構信息?

感謝,

邁克

回答

2

我不認爲你的選擇真的是相互排斥的 - 任何你最終做會有一些數據庫和一些非數據庫元素。

我是Modified Pre-Order Tree Traversal算法及其優秀的Django實現django-mptt的忠實粉絲。

但是,如果您在嵌套集上死了,請查看django-treebeard,其中提供了相鄰列表和物化路徑。