我想在 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
是相关管理器的效果,类似于如果我使用了 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/