这似乎是一个非常简单的问题,但我找不到答案:
带有外键的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.
"""
答案 0 :(得分:1)
答案:不,他们不这样做。
我应该收听QuestionResponse对象。
感谢@ozgur的回答。