我有一个模型正在做这样的事情:
class Job(Model):
...
class Attempt(Model):
job = ForeignKey(Job)
attempt_number = PositiveIntegerField()
class StatusHistory(Model):
attempt = ForeignKey(Attempt)
state = CharField()
随着作业经历各种状态,一个状态被添加到历史中。当它经历各种尝试时,会添加一个尝试。
我经常发现自己想要构建一个查询,该查询遍历当前(即最新)尝试处于特定(当前,最新)状态的所有作业。
我知道我可以说 job.attempt_set.latest() 来获取特定工作的最新尝试,但是能够查询,比如说,
Job.objects.filter(attempt_set__latest__state_set__latest__state='final')
只是似乎不可能。
我倾向于向 Job 或 Attempt 添加另一个外键以获取最新的尝试/状态,并在我添加尝试/状态历史记录时使其在事务中保持最新。
想法?这是众所周知的设计模式吗?你会怎么做?