Gri*_*cha 2 django many-to-many
我正在尝试创建一个表示图形节点的模型。
class Node(models.model):
ins = models.ManyToManyField("self", null=True, blank=True)
outs = models.ManyToManyField("self", null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
现在假设我们有节点 a 和 b。如果我为 b django 添加 a as in(因为'对称'属性)将添加 b as in for a。
我不知道如何设置 a -> b 它会自动设置 b <- a。
我想过建立一些中产阶级的关系,但并没有真正看到它是如何运作的。从字面上看怎么写。
我会看到它是这样的:
class Node(models.Model):
ins = models.ManyToManyField("self", null=True, blank=True, through="Edge")
outs = models.ManyToManyField("self", null=True, blank=True, through="Edge")
class Edge(models.Model):
node1_ins = models.ForeignKey(Node)
node2_outs = models.ForeignKey(Node)
Run Code Online (Sandbox Code Playgroud)
但当然,这个根本行不通。
知道如何解决这个问题吗?
提前致谢,格雷格
你可能想尝试这样的事情:
from django.db import models
class Node(models.Model):
outs = models.ManyToManyField("self", null=True, blank=True,
symmetrical=False, related_name="ins", through='Edge')
class Edge(models.Model):
from_node = models.ForeignKey(Node, related_name='edges_down')
to_node = models.ForeignKey(Node, related_name='edges_up')
Run Code Online (Sandbox Code Playgroud)
我发现管理多个 m2m 字段需要多个“直通”表,这会变得混乱。
n1 = Node.objects.create()
n2 = Node.objects.create()
edge = Edge.objects.create(from_node=n1, to_node=n2)
print n1.outs.all()
#[<Node: Node object>]
print n1.ins.all()
# []
print n2.outs.all()
# []
print n2.ins.all()
# [<Node: Node object>]
Run Code Online (Sandbox Code Playgroud)
使用此模式,您将设置从到关系。Theouts将是明确的,而 theins将是一个关系。也许这会奏效?
在edges_up与edges_down节点上的关系对象也让你找关系边缘。
n1.edges_down.all()
# [<Edge: Edge object>]
n2.edges_up.all()
# [<Edge: Edge object>]
Run Code Online (Sandbox Code Playgroud)
这里的名字可能不清楚。我有点喜欢“上游”和“下游”的概念
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |