外键关系中的django multy级查询

时间:2015-05-25 23:18:56

标签: django django-models

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

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号题目查询第23号问题并回答第2号。以相反的顺序,我想查询Answer.objects.get(pk = 2),这是Question.objects.get(pk = 23)的答案,该问题来自Subjects.objects.get(pk = 2)。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

就像这样

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?")

答案 1 :(得分:0)

如果需要,您可以使用关系或反向关系:

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 queryset可能具有重复值。因此,您可以使用distinct()从结果查询集中删除重复项。

Check documentation了解更多