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

Using Django model's post_save for manual cache invalidation: do foreign keys trigger save()?

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

它们 是 saved/changed 时,带有外键的 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.
    """

或者我必须听取要保存的实际问题响应吗?

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

回答:不,他们不那样做。

我应该听听问题响应对象。

感谢@ozgur 的回答。