Я хочу создать неориентированного графа в 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, подобного тому, что было бы установкой или для first_set или для second_set, имел, я использовал related_names, за исключением того, что это будет иметь все узлы, которые могут быть достигнуты с единственным краем, вместо просто тех, которые могут быть достигнуты в одном направлении.
Я должен был сделать что-то похожее с моим текущим проектом. Моим решением было иметь ManyToManyField
в моем эквиваленте модели Node
. Что-то вроде этого:
class Node(models.Model):
adjacent = models.ManyToManyField("self", null=True, blank=True)
Обратите внимание, что "Я" выше необходимо, чтобы позволить ManyToManyField
указать на себя.
Используя этот код, все узлы, прилегающие к данному узлу N
, можно найти с помощью N.adjacent.all()
.