2012-07-12 125 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对象不再存在于数据库中,查询它将失败。

您可能想要使用预先删除信号。