Python Django筛选器外部查询键
在这个问答游戏中,我试图过滤特定课程的问题Python Django筛选器外部查询键,python,django,Python,Django,在这个问答游戏中,我试图过滤特定课程的问题 models.py class Course(models.Model): course_name = models.CharField(max_length=50) date_created = models.DateTimeField(auto_now_add=True) class Quiz(models.Model): course_name = models.ForeignKey(Course, on_delete
models.py
class Course(models.Model):
course_name = models.CharField(max_length=50)
date_created = models.DateTimeField(auto_now_add=True)
class Quiz(models.Model):
course_name = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='quiz_course')
question = models.TextField(max_length=100)
class Choice(models.Model):
question = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name="choice_question")
choice = models.CharField(max_length=100)
is_true = models.BooleanField("This is Correct Answer", default=False)
class Quizgame(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
total_score = models.DecimalField("Total score", default=0, decimal_places=2, max_digits=6)
start_time = models.DateTimeField(auto_now_add=True)
finish_time = models.DateTimeField(null=True)
def get_new_question(self,course_id):
used_question = AttemptedQuestion.objects.filter(quiz_profile=self).values_list('question__id',flat=True)
remaining_questions = Quiz.objects.exclude(id__in=used_question)
if not remaining_questions.exists():
return
return random.choice(remaining_questions)
def create_attempt(self, question):
attempted_question = AttemptedQuestion(question=question, quiz_profile=self)
attempted_question.save()
class AttemptedQuestion(models.Model):
quiz_profile = models.ForeignKey(Quizgame, on_delete=models.CASCADE, related_name='attempt')
question = models.ForeignKey(Quiz, on_delete=models.CASCADE)
choice = models.ForeignKey(Choice, on_delete=models.CASCADE, null=True)
is_true = models.BooleanField(default=False)
在上面的Quizgame课堂中,我用获取新问题方法过滤问题。在这里,我通过了一个课程id作为参数,我不知道如何用课程id过滤特定课程问题。如果你试图将一个问题链接到一个课程,在您的AttemptedQuestion类中,我看不到与课程对象相关的ForeignKey。你应该加上
class AttemptedQuestion(models.Model):
# ...
课程=models.ForeignKey(课程,on_delete=models.CASCADE,null=True)
然后你可以简单地通过
qs=AttemptedQuestion.objects.filter(课程=课程id)
在回答您的问题之前,有一个简单的提示可以帮助您提高代码的可读性
如果要为名为课程
的模型创建FK,请将字段命名为课程
。“课程名称”意味着我们将在该字段中获得一个名称
要通过course\u id
变量访问所有quick
实例,可以在filter()方法中使用\u
运算符,如下所示:
Quiz.objects.filter(course_name__id=course_id)
请注意“课程名称”后的双下划线。这告诉Django:
“筛选测验,其中课程名称的id等于‘课程id’”