我正在尝试创建一个接受用户输入的简单树应用程序,并根据输入将节点添加到树结构中。我希望树的每个节点都是一般模型的实例,称为节点。
一个条目最多包含两部分:一个父项,一个是第一个括号的字符串的开头,另一个是括号中的子项。
例如,假设用户输入以下内容:
"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
显然我不允许使用另一个节点作为我的外键“parent”,因为“Node”尚未定义。这似乎是一个非常基本的错误,但我仍然不明白为什么不允许这样做。
任何人都可以解释为什么我无法使用另一个“节点”作为外键吗?如果这是一个失败的原因,那么定义我想要的结构类型的更好方法是什么呢?
答案 0 :(得分:1)
节点在类定义中不可用,因为它尚未定义。为此,Django允许您将名称用作引号中的字符串。
但是对于您的潜在问题,您应该查看像django-mptt这样的现有库。