帮助使用django';用于联合查询的ORM

帮助使用django';用于联合查询的ORM,django,orm,Django,Orm,我正在为一个网站制作历史页面。我的类的结构是这样的: class Person(models.Model): name = models.CharField(max_length=100) type = models.CharField(max_length=30) class History(models.Model): date = models.DateField(max_length=100) action = models.CharField(max_

我正在为一个网站制作历史页面。我的类的结构是这样的:

class Person(models.Model):
    name = models.CharField(max_length=100)
    type = models.CharField(max_length=30)

class History(models.Model):
    date = models.DateField(max_length=100)
    action = models.CharField(max_length=250)
    person = models.ForeignKey(Person)

class Parent(Person):
    #some attributes that are not relevant

class Son(Person)
    parent = models.ForeignKey(Parent)
    #other attributes that are not relevant

这很简单。。。我有一个家长,他有多个儿子都可以在网站上执行操作,他们都保存在历史记录表中,该表引用了执行操作的人。历史记录表类似于:

date       | action        | person_id 
----------------------------------------
16-12-2010 | saved profile | 1
16-12-2010 | new child     | 2
作为父母,我需要展示他所有的行为和他儿子的行为 使用sql将是:

SELECT * FROM History where person_id=1 
UNION 
SELECT h.* FROM History h JOIN Son s ON s.person_ptr_id=h.person_id WHERE s.parent_id=1 
但我不知道如何使用django的ORM实现这一点。Myabe使用两个查询?一圈? 你有什么想法吗?我非常感谢你的帮助。。提前谢谢

顺便说一句:我使用的是django 1.1


编辑:我在类中添加了属性。这些只是示例,我的表有更多属性,但django就是这样将关系转换为表的

我认为这就是sql:

p = Parent.objects.get(id=1)
history_qs = History.objects.all()
history_qs = history_qs.filter(Q(person=p)|Q(person__in=Son.objects.filter(parent=p)))

联合不是必需的。

你能发布模型的源代码吗?外键关系就足够了。@PleasedOntAttribute:您是否在Django中将
Person
建模为一个抽象类?另外,
Parent
Son
是否被建模为单独的类?这意味着不同的桌子。使用一个类对它们进行建模有意义吗?外键指向同一个类?这只是我正在使用的实际表的一个示例,其中父表和子表具有不同的属性,并且与其他表的关系也不同。。所以我更容易把它们分开放在不同的表中。在这种情况下,我认为您应该首先提供合适的Django模型类。在那之后,做一个查询就容易多了。。但是django模型与图表没有什么不同,我的意思是,继承性和1xN关系在我的django模型上,我需要的查询就是我发布的查询,但我不知道如何创建查询集。。它必须类似于History.objects.filter(Q(person_uid=1)| Q(“id=1的父项的所有子项的历史记录”))