Django外键,用于两种不同类型的对象



我有两个不同的模型:

class Parent(models.Model):
    # fields...
Class Child(models.Model):
    # if first child in the tree
    parent = models.ForeignKey(Parent)
    # else
    # parent = models.ForeignKey('self')

我的系统中只有一个母节,它可以有多个孩子,每个孩子都可以有多个孩子等。实现这种关系的正确方法是什么?我会喜欢查看工作示例,如果有人知道如何处理。

我对django-mptt发红,但听起来很复杂,满足了我的需求。我实际上是在建模我的系统中的真实人际关系,所以父母节点通常只有很少的孩子,其中一些孩子也可能只有很少的孩子,并且同时只有四个,也许只有五代。因此,通常树包含大约十个节点,即使最大限度限制为数百个节点,这是极为罕见的情况。从这个角度来看,效率不是一件大事,所以我更喜欢最简单的解决方案。

我将使用与自身的Manytomany关系,如SO问题所述。

当然,您的设计需要改变,没有父母和孩子,只有父母或人类之类

class Human(models.Model):
    children = models.ManyToManyField('self', blank=True)
    other_info = ...

该示例页面和该参考页面将为您提供帮助。

请注意,此设计并不能以任何形式的"错误"关系保护您。一个人可能是他自己的父亲或祖父或任何不可能的情况。在将孩子添加到数据库中之前,您需要自己检查此问题。

最新更新