Skip to main content
 首页 » 编程设计

python之使用 Django 模型的 post_save 进行手动缓存失效 : do foreign keys trigger save()

2025年05月04日26kevingrace

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

带有外键的 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. 
    """ 

请您参考如下方法:

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

我应该听取 QuestionResponse 对象。

感谢@ozgur 的回答。