使用Django模型的post_save进行手动缓存失效:外键是否会触发save()?

2024-09-30 20:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题看起来很简单,但我很难找到答案:

当保存/更改带有外键的Django模型时,它们是否调用它们所指向的模型的save()方法?在

我正在研究一个SAT考试的模型,该模型用于SAT考试,评分和评分——最后一个涉及缓存和缓存失效——并试图找出何时必须删除缓存的分数对象并重新计算它。在

我有三个模型:ExamResponse、QuestionResponse和ExamScore,具体来说我们可以这样说:

class ExamResponse(models.Model):
    user = models.ForeignKey(User)
    exam = models.ForeignKey(Exam)

class QuestionResponse(models.Model):
    exam_response = models.ForeignKey(ExamResponse)
    answer = models.TextField()
    score = models.smallIntegerField(default=0)

class ExamScore(models.Model):
    exam_response = models.ForeignKey(ExamResponse)
    score = models.smallIntegerField(default=0)

每当老师给一个问题回答打分(通过改变分数域),我想删除与问题回答的ExamResponse相关联的examStore。我能监听到一个ExamResponse对象的变化信号吗?在

^{pr2}$

或者我必须倾听实际的问题回答才能保存下来吗?在

@receiver(post_save, model=QuestionResponse)
def invalidate_exam_response_stats(sender, **kwargs):
    """
    Look up the QuestionResponse's ExamResponse, then delete
    the associated ExamScore.
    """

Tags: 对象模型modelmodelsresponsesave评分sat