【发布时间】: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' 有一个外键关系。这似乎很棘手,因为如果你想向下移动层,你必须检查每一层的两个键 - 当你知道只有第一个 Mid 与 Top 有关系,而其他所有东西都与 @ 有关系时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 可以链接到Top 和Mid。缺点是这给代码增加了很多复杂性。
这是我后来发现的一个相关问题: Django: How do I model a tree of heterogeneous data types?
【问题讨论】:
-
您能否解释一下为什么答案不准确?非常感谢。
标签: python django database relational-database