我正在为网站制作历史页面。我的类的结构是这样的:
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
非常简单...我有一个父,有多个儿子,他们都可以在网站上执行操作,并且全部保存在历史记录表中,该表引用了执行该操作的Person。历史表类似于:
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使用两个查询?一个循环? 你有什么想法?我真的很感激一些帮助..提前谢谢
BTW:我正在使用django 1.1
编辑:我在课程中添加了属性。这些只是示例,我的表有更多属性,但这就是django将关系转换为表的方式
答案 0 :(得分:1)
我认为这是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)))
没有必要结合。