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.Title、Subtopic.Title、Paper.Title を含むすべての属性を一覧表示する必要があります。これらは、Topic、Subtopic、Paper という外部オブジェクトにそれぞれ存在します。単一のクエリでこれを行うにはどうすればよいですか?

4

2 に答える 2

0

外部キー属性に基づいてフィルタリングするには、FK モデル名の後に 2 つのアンダースコアを付けてから、属性名を使用します。

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)
   .....

django が ID を作成するので、ID を入力する必要はありません。

ビュー.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
}

モデル クラスが正しくありません。多くの外部キーを配置する必要はありません。1 つの外部キーで問題ありません。

{% 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 に答える