2012-07-12 81 views
0

這是從我的models.py代碼Model實例不能按預期工作

#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拋出DoesNotExist錯誤。在我的tests.py中,question.answer_set.all()Answer.objects.get(question=question)按預期工作。
我希望有人能幫我解決這個問題,並解釋這個怪事(至少對我的小老鼠來說)

回答

3

這段代碼是在刪除後觸發的。換句話說,刪除已經發生,所以Question對象不再存在於數據庫中,查詢它將失敗。

您可能想要使用預先刪除信號。