Python 试图通过使用DJANGO ORM应用连接select_相关查询来检索具有特定id值的数据
我想检索特定子主题id的问题及其选项和答案。(例如,我想检索所有问题及其选择,回答子主题id为2的问题),但当我应用查询时,它会向我提供DB中存在的所有子主题问题和答案 这是我的模特Python 试图通过使用DJANGO ORM应用连接select_相关查询来检索具有特定id值的数据,python,mysql,django,django-orm,Python,Mysql,Django,Django Orm,我想检索特定子主题id的问题及其选项和答案。(例如,我想检索所有问题及其选择,回答子主题id为2的问题),但当我应用查询时,它会向我提供DB中存在的所有子主题问题和答案 这是我的模特 from django.db import models from django.db.models import Model # Create your models here. class Teacher_Signup(models.Model): username = models.CharFie
from django.db import models
from django.db.models import Model
# Create your models here.
class Teacher_Signup(models.Model):
username = models.CharField(max_length=122)
email = models.EmailField(max_length=40)
password1 = models.CharField(max_length=20)
password2 = models.CharField(max_length=20)
def __str__(self):
return self.username
class Meta:
db_table = 'Teacher_Signup'
class Add_Grade(models.Model):
grade = models.CharField(max_length=40)
username = models.ForeignKey(Teacher_Signup,on_delete=models.CASCADE, default = 1)
#teacher_name = models.CharField(max_length=40)
def __int__(self):
return id
class Meta:
db_table = 'Add_Grade'
class Student_Signup(models.Model):
grade = models.ForeignKey(Add_Grade,on_delete=models.CASCADE, default = 1)
username = models.CharField(max_length=70)
father_name = models.EmailField(max_length=70)
#grade = models.PositiveIntegerField ()
age =models.PositiveIntegerField ()
phone_no =models.IntegerField ()
password1 = models.CharField(max_length=20)
password2 = models.CharField(max_length=20)
def __str__(self):
return self.username
class Meta:
db_table = 'Student_Signup'
class Add_Topics(models.Model):
grade = models.ForeignKey(Add_Grade,on_delete=models.CASCADE, default = 1)
topic = models.CharField(max_length=40)
def __int__(self):
return id
class Meta:
db_table = 'Add_Topics'
class Sub_Topics(models.Model):
grade = models.ForeignKey(Add_Grade,on_delete=models.CASCADE, default = 1)
topic = models.ForeignKey(Add_Topics,on_delete=models.CASCADE, default = 1)
videofile = models.FileField(upload_to='videos/', null=True, verbose_name="")
subtopic = models.CharField(max_length=40, default = 1)
def __str__(self):
return self.subtopic
class Meta:
db_table = 'Sub_Topics'
class Questions(models.Model):
grade = models.ForeignKey(Add_Grade,on_delete=models.CASCADE, default = 1)
topic = models.ForeignKey(Add_Topics, on_delete= models.CASCADE , default = 1)
sub_topic = models.ForeignKey(Sub_Topics, on_delete= models.CASCADE, default = 1)
question = models.CharField(max_length=100)
image= models.URLField(null=True)
difficulty=models.CharField(max_length=100, default='')
class Meta:
db_table = 'questions'
class Options(models.Model):
grade = models.ForeignKey(Add_Grade,on_delete=models.CASCADE, default = 1)
topic = models.ForeignKey(Add_Topics, on_delete= models.CASCADE, default = 1)
sub_topic = models.ForeignKey(Sub_Topics, on_delete= models.CASCADE, default = 1)
question = models.ForeignKey(Questions, on_delete= models.CASCADE, default = 1)
option1 = models.CharField(max_length=20)
option2 = models.CharField(max_length=20)
option3 = models.CharField(max_length=20)
option4 = models.CharField(max_length=20)
class Meta:
db_table = 'Options'
class Answers(models.Model):
grade = models.ForeignKey(Add_Grade,on_delete=models.CASCADE, default = 1)
topic = models.ForeignKey(Add_Topics, on_delete= models.CASCADE, default = 1)
sub_topic = models.ForeignKey(Sub_Topics, on_delete= models.CASCADE, default = 1)
question = models.ForeignKey(Questions, on_delete= models.CASCADE, default = 1)
option= models.ForeignKey(Options, on_delete= models.CASCADE, default = 1)
correct_ans = models.CharField(max_length=20)
class Meta:
db_table = 'Answers'
in views.py
for e in subtopics:
if e.subtopic==subtopicnames and e.topic_id==p and e.grade_id==o:
t=int(e.id)# currently user is working on this subtopic
subtopicid=str(t)
allques=Answers.objects.select_related('question').select_related('option').filter(sub_topic_id=t)
print(str(allques.query))
for x in allques:
print(x.question.question,x.option.option1,x.option.option2,x.option.option3,x.option.option4,x.correct_ans)
从该数据库生成SQL查询
SELECT `Answers`.`id`, `Answers`.`grade_id`, `Answers`.`topic_id`, `Answers`.`sub_topic_id`, `Answers`.`question_id`, `Answers`.`option_id`, `Answers`.`correct_ans`, `questions`.`id`, `questions`.`grade_id`, `questions`.`topic_id`, `questions`.`sub_topic_id`, `questions`.`question`, `questions`.`image`, `questions`.`difficulty`, `Options`.`id`, `Options`.`grade_id`, `Options`.`topic_id`, `Options`.`sub_topic_id`, `Options`.`question_id`, `Options`.`option1`, `Options`.`option2`, `Options`.`option3`, `Options`.`option4` FROM `Answers` INNER JOIN `questions` ON (`Answers`.`question_id` = `questions`.`id`) INNER JOIN `Options` ON (`Answers`.`option_id` = `Options`.`id`) WHERE `Answers`.`sub_topic_id` = 2
请指导我如何使用DJANGO ORM获得子主题
id=1
的特定子主题问题,例如:
questions=questions.objects.filter(子主题\u id=1)
这将返回给定子主题的所有问题