我需要使用Django来实现像树这样的东西,这个树中的节点有一个父节点,还有很多子节点。问题是节点的类型不一样,它们属于不同的模型,尽管它们都是所有都有一个名为parent的外键,但在其他字段和方法中有所不同,每个节点的父节点可能是任何其他类型的节点。对于一个节点,我想知道谁是它的父节点,谁是它的子节点。
我试过了:
class BaseNode(models.Model):
parent = models.ForeignKey("self", blank=True, null=True, related_name="child_set")
def add_child(self, node):
self.child_set.add(node)
self.save()
def get_children(self, node):
return self.child_set.all()
class Meta:
abstract = True
class ANode(BaseNode):
pass
class BNode(BaseNode):
pass
执行此操作时:
a = ANode()
b = BNode()
a.add_child(b)
有一个错误:
TypeError:预期的'ANode'实例,得到< BNode:BNode对象>