我正在尝试在 Django 中为树结构建模。这是我所拥有内容的简化版本:
from django.db import models
class Node(models.Model):
parent = models.ForeignKey("Node", null=True)
name = models.CharField(max_length=20)
def child_cnt(self):
return self.node_set.count()
def __unicode__(self):
return self.name
到目前为止一切顺利。有用。但是,如果我现在开始创建这样的层次结构:
from ....models import Node
root = Node()
root.name = "ROOT"
root.parent = None
root.save()
n = Node()
print n.child_cnt()
>> 1
print n.node_set.all()
[<Node: ROOT>]
那么根节点作为子节点在 n
中做了什么?我怎样才能避免这种情况?
一旦我调用了 n.save()
问题就消失了,但是在管理站点中看到一个节点初始化为 1 的 child_cnt
有点令人讨厌。
最佳答案
我知道这听起来很疯狂,但我花了几分钟试图解决您的问题,但在我尝试过的任何尝试中都没有奏效。 无论如何,对于 Tree ForeignKey,我在网上找到了另一个解决方案,这是一个处理此类 key 的完整库,https://github.com/django-mptt/django-mptt 你可以试试看,它可能适合你。我讨厌为这么小的东西添加一个库,但是我找不到更好的东西。
此外,如果您不想导入整个库,您可以只将 TreeForeignKey 引入您的代码。
关于python - Django 模型 : root node appears as child in unsaved nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10824074/