2014-01-23 92 views
0

我試圖做一個簡單的樹應用程序,接受用戶的輸入,並添加節點到基於輸入的樹結構。我希望樹的每個節點都是一個通用模型的實例,稱爲節點。樹與Django模型 - 不同的方法

一個條目最多有兩部分:一個父項,它是字符串的開始,直到第一個圓括號,還有一個子項,它在括號中。

例如,假設用戶輸入以下內容:

"animal(cat)" 
"animal(dog)" 
"dog(golden retriever)" 
"organic_life_form(animal)" 

這應該產生這種結構的樹:

organic_life_form 
     | 
    animal 
/  \ 
dog   cat 
    | 
golden retriever 

我做了定義我的「節點」的模式是錯誤的,但我不知道如何解決它。

class Node(models.Model): 
    name = models.CharField(max_length=200) 
    parent = models.ForeignKey(Node) 
    nodes = models.IntegerField(default=0) 

    def __unicode__(self): 
     return self.name 

顯然我不允許使用另一個節點作爲我的外鍵「父」,因爲「節點」尚未定義。這似乎是一個非常基本的錯誤,但我仍然不明白爲什麼不允許這樣做。

任何人都可以解釋爲什麼我無法使用另一個「節點」作爲外鍵?如果這是一個失敗的原因,那麼定義我想要的結構類型的更好方法是什麼?

回答

1

節點在類定義中不可用,因爲它尚未定義。爲了做到這一點,Django允許您將該名稱用作引號中的字符串。

但是對於您的潛在問題,您應該查看現有的庫,如django-mptt。

+0

其實我爲了學習而自己嘗試這個,所以我會在沒有現有庫的情況下嘗試這個。似乎應該有其他方法來模擬我所關心的結構,但我想不出任何方法。 –

+0

正如我所說的,使用''Node''而​​不是'Node'可以讓你使用你當前的方法 –