【问题标题】:django model: have recursive relationshipdjango模型:有递归关系
【发布时间】:2013-08-04 14:31:25
【问题描述】:

我将如何正确建模如下所示的递归关系?

class A(models.Model):
    previous_A = models.OneToOneField(A)

【问题讨论】:

    标签: django-models


    【解决方案1】:

    使用 Django,您可以对父子关系进行如下建模:

    class Person(models.Model):
        name = models.CharField(max_length=128)
        parent = models.ForeignKey('self', null=True, related_name='children')
    

    引用ForeignKeydocs

    创建递归关系——一个具有多对一的对象 与自身的关系——使用models.ForeignKey('self')

    附:通过“自反关系”,我假设您指的是递归关联,它将单个类类型(服务于一个角色)连接到自身(服务于另一个角色);即父子关系。

    【讨论】:

    • 我也对这个问题很感兴趣,如果你有一个自反/递归的多对多关系呢?
    • @astrocybernaute 你能举一个这种关系的例子吗?从来没有过这样的要求。
    • 假设我对一个可以有一个或多个“经理”的“人”有递归关系,“经理”也是一个“人”,或者如果我在“人”会有两个“父母”
    • @astrocybernaute 您需要创建 2 个ManyToManyField 关系。一个叫manages,另一个叫managed_by。这将产生两个中间表来启用您描述的关系。 manages 会将 Person 链接到他管理的一对多 Person。 managed_by 将一个人链接到他可能管理他的一对多经理。如果您将此作为问题发布,请给我链接,我将能够更好地格式化我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多