我想在Django中建立无向图。我已经建立了带有两个节点类外键(第一,第二)的边缘模型,但是与related_name冲突。我可以使用first_set和second_set,但是由于该图是无向的,因此无论喜欢与否,都无关紧要。建议使用什么方法来处理这种情况?
编辑:以下是我正在使用的模型:
class Node(models.Model):
#some irrelevant stuff
class Edge(models.Model):
#some other stuff
first = models.ForeignKey('Node',related_name=None)
second = models.ForeignKey('Node',related_name=None)
我想要的是
some_node.connected_nodes_set
可以起到RelatedManager的作用,类似于如果我使用related_names可以为first_set或second_set设置的内容,除了它具有可以通过单边,而不只是可以在一个方向上到达的那些边。 最佳答案
我必须对当前的项目做类似的事情。我的解决方案是在我的ManyToManyField
模型中添加一个Node
。像这样的东西:
class Node(models.Model):
adjacent = models.ManyToManyField("self", null=True, blank=True)
注意,上面的"self"是允许
ManyToManyField
指向自身的必要条件。使用此代码,可以使用
N
找到与给定节点N.adjacent.all()
相邻的所有节点。关于Django无向图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2008310/