我想在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/

10-15 12:47