gpt4 book ai didi

Django:查询抽象基类

转载 作者:行者123 更新时间:2023-12-02 07:01:54 24 4
gpt4 key购买 nike

我遇到了这样一种情况,我正在对一场足球比赛进行建模,每场比赛都有一组与之相关的事件,这些事件与比赛期间发生的事情有关。所以有点像这样:

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_setgoal_set 等在, 。通过设置abstract = False并使用具体继承可以解决这个问题吗?我读过这样做是 a bad idea, as it introduces an extra join .

处理此类情况的最佳方法是什么?

最佳答案

我同意 Peter Rowell 的评论 - 模型继承并不像您想象的那样,而且在我看来很少有用。

解决这个问题的更好方法是使用 generic relations 。因此,您将拥有一个带有 events = GenericRelation()Match 模型,并且每个事件类型都有一个返回 Match 的 GenericForeignKey 。然后您可以执行 match.events.all() 并获取该比赛的所有单独事件。

如果您愿意,您仍然可以对事件的基类使用抽象继承,前提是它们确实共享一些字段,例如描述和时间。

关于Django:查询抽象基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com