这似乎是一个非常简单的问题,但我找不到答案:
带有外键的 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 的回答。
