外键关系中的Django多级查询



如何进行多级查询?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()从结果查询集中删除重复项。

查看文档了解更多

最新更新