Django多对多循环引用?

2024-09-26 18:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

从概念上讲,我想要的是:

class Child:
    guardians = models.ManyToManyField(Guardian)

class Guardian:
    children = models.ManyToManyField(Child)

申请是为了学校。任何一个家长(监护人)可以有多个孩子,任何孩子都可以有多个监护人。现在,我不能像Python那样在C++中向前声明。在

最干净的方法是什么?我是否需要第三个“关系”类来表示这些联系(这就是我所倾向的)?但在我重新发明轮子之前,我想问问。看来这应该很容易。。。在


Tags: 方法child声明概念关系models孩子学校
2条回答

我不确定我是否理解这个问题。在

通过这样做:

class Child:
    guardians = models.ManyToManyField('Guardian', related_name='children')

class Guardian:
    .... some other fields
    # children = models.ManyToManyField(Child)  < - not needed

就像说“一个孩子可以有很多监护人,一个监护人可以有很多孩子”。你呢 不必在两个模型中都声明它。在

另外,django在幕后创建了第三个(中间)表。因为 这就是在RDBMS中对许多关系进行建模的方法。在

您希望显式地创建中间模型的唯一原因是 必须添加额外的信息来描述特定的多人关系。 i、 e

^{pr2}$

在这种情况下,你必须知道,既然你声明了一个显式的中间模型, 这是在监护人和孩子之间建立关系时使用的模型。在

例如

ChildGuardianMembership.objects.create(child=child_inst, guardian=guardian_inst)

在多个关系(如上所述)上添加额外字段的描述是here

关系已经是双向的,除非显式禁用。在

相关问题 更多 >

    热门问题