外键关系中的django多级查询

django multy level query in foreignkey relationship

如何进行多级查询?我的模特是

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

我想从Subject No.2 Question no.23 and answer 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)

那将 return 你一个 Answer 查询集。如果你想要一个 Subjects 查询集:

Subjects.object.filter(id=1, question__id=23, question__answer__id=2)

在第二个查询中,您使用的是反向关系,其中您对关系使用小写的模型名称。但是 Subjects queryset 由于一对多的关系方向可能有重复值。因此,您可以使用 distinct() 从结果查询集中删除重复项..

Check documentation 更多