如何进行多级查询?My Model is
from django.db import models
class Subjects(models.Model):
name=models.CharField(max_length=20)
pub_date= models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Question(models.Model):
subject = models.ForeignKey(Subjects)
ques = models.CharField(max_length=100)
pub_date=models.DateTimeField(auto_now=True)
def __str__(self):
return self.ques
class Answer(models.Model):
question = models.ForeignKey(Question)
ans1 = models.CharField(max_length=50)
ans2 = models.CharField(max_length=50)
ans3 = models.CharField(max_length=50)
def __str__(self):
return self.ans1
我想从主题2问题1中查询。23,回答2。反过来,我想查询answer .objects.get(pk=2),这是question .objects.get(pk=23)的答案,这个问题来自Subjects.objects.get(pk=2)。我该怎么做呢?
应该是这样的
s = Subjects.objects.get(name="No.2")
q = Question.objects.get(subject=s, ques="no.23")
a = Answer.objects.get(question=q, ans2="some answer?")
您可以使用关系,或者根据需要使用反向关系:
Answer.objects.filter(id=2, question__id=23, question__subject__id=2)
将返回一个Answer
查询集。如果您想拥有一个Subjects
查询集:
Subjects.object.filter(id=1, question__id=23, question__answer__id=2)
在第二个查询中,您正在使用反向关系,其中您使用小写的模型名称来表示关系。但Subjects
查询集由于一对多的关系方向,可能存在重复值。因此,您可以使用distinct()
从结果查询集中删除重复项。
查看文档了解更多