在 django 中执行 JOIN 以反向关系获取相关日期。共有三种型号。
以下是模型的代码
class Question(models.Model):
title = models.CharField(max_length=255 )
description = models.TextField(max_length=300)
class Quiz(models.Model):
name = models.CharField(max_length=225,blank=False )
quiz_type =models.IntegerField(choices=QUIZ_TYPE,default=0)
questions = models.ManyToManyField( Question, through='QuestionQuiz', related_name="quiz_question")
categories= models.ManyToManyField(Category,through='CategoryQuiz',related_name='quiz_category')
class QuestionQuiz(models.Model):
quiz = models.ForeignKey(Quiz,on_delete=models.CASCADE)
question = models.ForeignKey(Question,on_delete=models.CASCADE)
correct =models.DecimalField(max_digits=4, decimal_places=3)
incorrect= models.DecimalField(max_digits=4, decimal_places=3)
class Meta:
unique_together = ('quiz','question')
在此,使用模型问题测验将问题添加到测验中。
这里, QuizQuestion 与问题有外键关系。我需要从带有特定 quiz_id 的 QuestionQuiz 中获取所有问题 JOIN 和记录。
假设 quiz_id =3 那么我将获取所有正确和不正确的问题。如果该测验 id 被添加到问题中,那么它将显示正确不正确,否则这些将是空白的。
question_id | title|description|correct|incorrect|quesquizid
1 | Q1 |Q1desc |2 | -2 | 1
2 | Q2 |Q2desc | | |
ques_id =1 添加到 quiz_id=3 .ques_id=2 未添加到 quiz_id=3。因此,正确不正确为空白。
我尝试了以下操作,但它会获取所有问题和相关的测验分数,而不管它们在当前测验中是否出现:
Question.objects.prefetch_related('questionquiz_set').all()
结果应类似于以下查询
Select * from question as qs LEFT JOIN questionquiz as qq on (qq.question_id = qs.id AND qq.id=3)
请检查查询结果:
素胚勾勒不出你
相关分类