2012-07-12 2 views
0

여기 내 models.py의 코드 내 테스트에서모델 인스턴스는

#Models.py 
.... 
class Question(models.Model): 
    text = models.TextField(unique=True) 
    exam = models.ForeignKey(Exam) 
    level = models.ForeignKey(Level) 
    paper = models.ForeignKey(Paper) 
    topic = models.ForeignKey(Topic) 
    date_added = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

class Answer(models.Model): 
    question = models.ForeignKey(Question) 
    text = models.CharField(max_length=125) 
    is_correct = models.BooleanField() 
    explanation = models.TextField(blank=True) 
    date_added = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

@receiver(post_delete, sender=Question) 
def update_redis_deleted(sender, **kwargs): 
    host = getattr(settings, 'SESSION_REDIS_HOST', 'localhost') 
    port = getattr(settings, 'SESSION_REDIS_PORT', 6379) 
    db = getattr(settings, 'SESSION_REDIS_DB', 0) 

    server = redis.StrictRedis(host, port, db) 

    pipe = server.pipeline() 

    question = kwargs['instance'] 
    answer_set_list = question.answer_set.all() 
    answer = Answer.objects.get(question=question) 

가 나는 질문 인스턴스를 삭제할 때, answer_set_list 빈 목록이며, answer는 DoesNotExist의 오류가 발생한다 예상대로 작동하지 않습니다 . 내 tests.py에서 question.answer_set.all()Answer.objects.get(question=question)은 예상대로 작동합니다.
다른 사람이이 문제를 해결하고 이상하게 설명 할 수 있기를 바랍니다 (최소한 내 멍청한 마음에 대해서)

답변

3

이 코드는 삭제 후 삭제됩니다. 즉, 삭제가 이미 발생 했으므로 Question 객체가 데이터베이스에 더 이상 존재하지 않으며 쿼리가 실패합니다.

대신 사전 삭제 신호를 사용하는 것이 좋습니다.

관련 문제