我有一種情況,我正在模擬一場足球比賽,每場比賽都有一組與賽事相關的事件。因此,一些有點像這樣:Django:查詢抽象基類
class Event(models.Model):
time = models.IntegerField()
class Meta:
abstract = True
class Goal(Event):
scorer = models.ForeignKey('Player')
class PitchInvasion(Event):
number_of_people = models.IntegerField()
class FootballMatch(models.Model):
events = models.ForeignKey('Event')
原諒遙不可及的例子,但它的存在表明的Event
這些子類可以是任何東西。然後,我想要做的是能夠查詢所有這些事件並按時排序,以便按照時間順序查看該匹配中發生的事情。
但是,由於abstract = True
,Event
對象最後有一個pitchinvasion_set
,goal_set
等。這將通過設置abstract = False
並使用具體繼承來解決嗎?我讀過這樣做是a bad idea, as it introduces an extra join。
處理類似情況的最佳方法是什麼?
Django模型類繼承(真實或抽象)在Python意義上是* not * true繼承。這比其他任何方面都更方便。我不得不在一年前處理類似的事情,從來沒有真正找到滿意的解決方案。 –