【问题标题】:How to represent an unknown number of layers in data with Django models如何使用 Django 模型表示数据中未知数量的层
【发布时间】:2018-08-18 03:15:57
【问题描述】:

如何在一组 Django 数据库模型中最好地表示以下数据结构:

Top level element
  An unknown number n of Mid level element(s), n >= 1
    Low level element

例如:

Top
  Mid
    Mid
      Mid
        Bottom

Top
  Mid
    Bottom

问题是中级元素的模型不能同时具有中级元素和顶级元素作为父级。我能想到的解决方案是:

中级模型中的两个外键

中级模型可以与Top 有一个外键关系,而另一个与'self' 有一个外键关系。这似乎很棘手,因为如果你想向下移动层,你必须检查每一层的两个键 - 当你知道只有第一个 MidTop 有关系,而其他所有东西都与 @ 有关系时987654329@.

class Mid(models.Model):
    top_parent = models.ForeignKey(Top, blank=True, null=True)
    mid_parent = models.ForeignKey('self')

让 Top 成为 Mid 的实例

完全消除Top,以便Mids 始终链接到其他Mids。这个解决方案的问题是Top 有一些独特的属性,如果可以避免的话,我不想添加到Mid

使用泛型关系

使用通用关系,以便Mid 可以链接到TopMid。缺点是这给代码增加了很多复杂性。

这是我后来发现的一个相关问题: Django: How do I model a tree of heterogeneous data types?

【问题讨论】:

  • 您能否解释一下为什么答案不准确?非常感谢。

标签: python django database relational-database


【解决方案1】:

答案可能是:让 Top 成为 Mid 的代理模型

class Mid(models.Model):
    mid_parent = models.ForeignKey('self')

class Top(Mid):
    # here you have your unique properties
    class Meta:
        proxy = True

由于mid_parent 字段是必需的,因此Top 实例可以将自己作为mid_parent

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 2021-11-24
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2018-07-18
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多