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

时间:2015-08-02 20:02:05

标签: python django caching django-models django-signals

这似乎是一个非常简单的问题,但我找不到答案:

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

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

我有三个模型: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)

每当教师评分QuestionResponse(通过更改分数字段)时,我想删除与QuestionResponse的ExamResponse相关联的任何ExamScore。我可以收听更改为ExamResponse对象的信号吗?

@receiver(post_save, model=ExamResponse)
def invalidate_exam_response_stats(sender, **kwargs):
    """
    Delete the ExamScore associated with this ExamResponse
    since it's become invalid.
    """

或者我是否必须收听要保存的实际QuestionResponses?

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

1 个答案:

答案 0 :(得分:1)

答案:不,他们不这样做。

我应该收听QuestionResponse对象。

感谢@ozgur的回答。