0

我有这个模型类:

class question(models.Model):
    id = models.CharField(max_length=64, primary_key=True,null=False)
    paper_id = models.ForeignKey(paper,null=True)
    question_no = models.SmallIntegerField('question_no',max_length=6,null=True)
    content = models.TextField('content',null=False)
    topic_id = models.ForeignKey(topic,null=True)
    subtopic_id = models.ForeignKey(subtopic,null=True)
    std_answer = models.CharField(max_length=128,null=True)
    marks = models.IntegerField('marks',max_length=2,null=True)
    input = models.CharField(max_length=512,null=True,default=None)
    type_answer = models.CharField(max_length=512,null=True)
    type = models.CharField(max_length=512,null=True,default=None)

    def __str__(self):
        return str(self.id)

我需要列出它的所有属性,包括分别位于外部对象 Topic、Subtopic、Paper 中的 Topic.Title、Subtopic.Title 和 Paper.Title。如何在单个查询中执行此操作?

4

2 回答 2

0

要根据外键属性进行过滤,请使用 FK 模型名称后跟双下划线,然后是属性名称:

query = question.objects.filter(topic_id__title="foobar")

要轻松创建复杂查询,请使用Q 对象

于 2013-01-26T07:31:42.877 回答
0

您的 models.py 必须是这样的,例如:

class Topic(models.Model):
    .....

class SubTopic(models.Model)
    topic = models.ForeignKey(Topic)
    .....

class question(models.Model):
   question_no = models.SmallIntegerField('question_no',max_length=6,null=True)
   content = models.TextField('content',null=False)
   subtopic = models.ForeignKey(Subtopic)
   .....

您不必输入 id 因为 django 会为您创建它。

视图.py

def page(request):
return render(request, 'page.html', {
    'topics' : topic.objects.filter()
}

if you want to get by id

def page(request, id):
    topics = topic.objects.get(pk=id)
return render(request, 'page.html', {
    'topics' : topic
}

您的模型类不正确。你不必放很多外键。一个外键就可以了。

{% for topic in topics %}
    {{topic.title}}

    {% for subtopic in topic.subtopics  %}
        {{subtopic.title}}

        {% for question in subtopic.questions %}
            ............
        {% endfor %} 
    {% endfor %}
{% endfor %}
于 2013-01-26T07:40:18.493 回答